数组集合
来源:互联网 发布:java point方法 编辑:程序博客网 时间:2024/06/10 01:12
数组
===============================
* 存放一组数据的容器
* 数组每个位置都有一个下标(索引值)
* 数组长度在创建时指定,一旦创建出来,长度不可改变
数组的创建和访问
===============================
创建:
* int[] arr = new int[3];
_______________ ___________________
|_0_|__0__|_0_|<--------|数组内存首地址|arr
* int[] arr = {5,12,8,2}
____________________
|_5_|__12__|_8_|_2_|
* int[] arr = new int[]{5,12,8,2}
____________________
|_5_|__12__|_8_|_2_|
访问:
* 存:
arr[0] = 3;
arr[2] = 45;
* 取:
arr[0]
arr[2]
* 数组的长度属性:
arr.length
数组的相关操作方法
========================================
1. 复制数组
System.arraycopy(
原数组,
原数组起始位置,
目标数组,
目标数组起始位置,
数据个数
)
2. 数组工具类
java.util.Arrays
|- toString(arr) - 将数组中的元素,连接为字符串
|- copyOf(arr, len) - 将数组复制为指定长度的新数组
|-
|-
|-
|-
|-
二维数组
========================================
* 数组的数组
创建二维数组:
* int[][] arr = new int[3][3];
* int[][] arr = new int[3][];
* int[][] arr = {{2,3}, {4,5,6}};
数组练习
========================================
1. 复制数组
public static int[] copy(int[] arr) {
}
2. 将原数组,复制为指定长度的新数组
main:
int[] arr = {2,3,4};
copy(arr, 5)
public static int[] copy(int[] arr, int len) {
}
3. 求数组中的最大值
public static int max(int[] arr) {
// 10000000 00000000 00000000 00000000
int m = 0x80000000;
}
4. 交换位置
将数组中两个指定位置的值进行交换
public static void swap(int[] arr, int i, int j) {
}
5. 数组倒置
数组中的数据反向排列
6. 向数组中指定位置插入一个值
public static int[] insert(
int[] arr, int i, int value) {
}
7. 指定整数范围,将范围内的数字生成数组
main:
int[] arr = createArray(6, 10);
// [min, max)
public static int[] createArray(int min, int max) {
}
8. 将指定数组中的数据打乱顺序
int r = (int) (Math.random()*arr.length)
public static void shuffle(int[] arr) {
}
9. 从数组中移除一个数据
// 将 arr 中 i 位置的值移除掉
// 并返回新数组
public static int[] remove(int[] arr, int i) {
}
10. 插入排序
11. 选择排序
12. 冒泡排序(重点)
13. 二分法
快速查找算法
集合工具集
=======================================
java.util.ArrayList
java.util.LinkedList
java.util.HashMap
java.util.TreeMap
java.util.HashSet
java.util.TreeSet
java.util.Iterator
java.util.ArrayList
=======================================
* 内部存储结构:数组
构造方法
-------------------------------------
ArrayList list1 = new ArrayList(); // 初始容量10
ArrayList list2 = new ArrayList(5); // 指定初始容量
方法
-------------------------------------
add(Object obj) - 添加
get(int index) - 获得指定位置的对象
size() - 获得存入的数据量
remove(int index) - 移除指定位置数据,并返回被移除的数据
remove(Object obj) - 移除第一个找到的相等数据,返回布尔值表示是否移除
clear() - 清空
contains(Object o) - 判断是否包含与指定数据相等的数据
indexOf(Object o) - 获得指定数据所在的位置
set(int index, Object o) - 替换,返回被替换的数据
toArray() - 转为 Object[] 数组
iterator() - 获得新的迭代器对象
java.util.LinkedList
=======================================
* 与 ArrayList 用法相同
* 内部用双向链表结构存储数据
* 存取两端数据效率高
方法
-------------------------------------
* ArrayList 中相同的方法
addFirst(Object o)
addLast(Object o)
getFirst()
getLast()
removeFirst()
removeLast()
FIFO - First In First Out 队列
------------------------------------
offer(Object o) - addLast()
peek() - getFirst()
poll() - removeFirst()
LIFO - Last In First Out 栈
------------------------------------
push() - addFirst()
pop() - removeFirst()
LinkedList 遍历
--------------------------------------
Iterator it = list.iterator();
while(it.hasNext()) {
Object o = it.next();
...
}
java.util.HashMap
===========================================
* 哈希表结构,存储键-值对数据
* 快速查找数据
* 乱序
* 键必须重写 hashCode() 和 equals() 方法
* hashCode() 和 equals() 必须使用相同的属性来运算或判断
* hashCode() 方法的实现应保证:
*) equals() 相等的对象,必须具有相同的哈希值
*) 具有相同哈希值的对象,equals() 不保证相等(应尽量相等)
存数据步骤:
-----------------------------------------
1) 获得键的哈希值
2) 通过哈希值运算得到一个索引位置
3) 创建一个 Entry 实例,封装键和值两个数据
4) 将 Entry 实例放入 2 计算出的位置
4.1) 如果此位置已经存在数据
4.1.1) equals 比较相等,覆盖
4.2.2) equals 比较不相等,链表挂在一起
获取数据步骤:
-----------------------------------------
1) 获得键的哈希值
2) 通过哈希值运算得到一个索引位置
3) 如果只有一个对象,equals 比较
3.1) 相等,取出
3.2) 不等,不取
4) 如果存在多个对象,依次执行 equals 比较,直到找到相等的为止
方法
-----------------------------------------
push(Object key, Object val)
get(Object key)
remove(Object key)
clear()
containsKey(Object key)
containsValue(Object val)
size()
遍历
---------------------------------------
keySet() - 返回一个包含所有键的 Set
entrySet() - 返回一个包含所有 Entry 的 Set
java.util.TreeMap
=====================================
* 存放键-值对数据
* 二叉树存储结构
* 快速查找算法
* 从小到大
* 键可以实现 Comparable 接口,实现其 compareTo() 方法
* 也可在 TreeMap 中外接比较器 Comparator,对数据比大小
构造方法
-----------------------------------
TreeMap map1 = new TreeMap();
TreeMap map2 = new TreeMap(外接的比较器);
java.util.HashSet
=====================================
* 内部使用 HashMap 实现
* 不重复, 乱序
方法
--------------------------------------
add(Object o)
remove(Object o)
clear()
contains(Object o)
size()
iterator()
java.util.TreeSet
=====================================
* 内部使用 TreeMap 实现
* 方法与 HashSet 相同
* 不重复,从小到大
构造方法
--------------------------------------
TreeSet set1 = new TreeSet();
TreeSet set2 = new TreeSet(外接的比较器);
java.util.Collection 接口
=====================================
add(Object o)
remove(Object o)
clear()
size()
contains(Object o)
iterator()
addAll(Collection c)
java.util.List 接口
=====================================
get(int index)
remove(int index)
set(int index, Object o)
indexOf(Object o)
java.util.Set 接口
=====================================
* HashSet、 TreeSet 的父接口
java.util.Map 接口
=====================================
* HashMap 和 TreeMap 的父接口
java.util.Queue 接口,FIFO
=====================================
offer() - 尾部加入
peek() - 访问头部
poll() - 移除头部
* 子类: LinkedList
java.util.Deque 接口,Double End Queue,LIFO
=====================================
push() - 压栈
pop() - 弹栈
* 子类: LinkedList
java.util.Collections
=====================================
addAll(Collection c, ......)
sort(List list)
sort(List list, Comparator c)
binarySearch(List list, Object o)
shuffle(List list)
reverse(List list)
fill(List list, Object o)
max(Collection c)
min(Collection c)
集合、数组相互转换
=====================================
* 数组转集合:
List list = Arrays.asList(array)
* 集合转数组:
String[] arr =
list.toArray(new String[list.size()]);
String[] arr =
list.toArray(new String[0]);
- 数组集合
- 数组集合
- 集合(集合转成数组)
- 数组与集合 -- 数组
- 集合(Arrays)-数组变集合
- 集合变数组---------集合变数组
- 用集合初始化数组
- 数组与集合
- 数组、集合排序
- 数组集合之TList
- 数组集合之TBits
- 集合或数组排序
- 数组集合+反射
- 数组/集合(ArrayList)/泛型
- 数组和集合
- 数组和集合
- 集合与数组
- java集合和数组
- 关于提高Linux桌面系统使用效率
- 11-18win8 布局
- 关于passing ‘const *’ as ‘this’ argument of ‘*’ discards qualifiers的问题
- C++ 类的学习,创建
- MQX3.8源代码分析:GPIO(5)驱动安装函数 _io_dev_install_ext()
- 数组集合
- 表单练习
- 计算机期刊杂志投稿指南
- LDD3源码分析之llseek分析
- 基于S3C2440的Linux内核移植和yaffs2文件系统制作--修改Linux源码参数
- 如何删除正在运行中的Job所对应的过程
- About the Flashback Database Window【每日一译】--20121118
- 项目管理心得:一个项目经理的个人体会、经验总结
- js(一)