总述:数据非常重要。选择正确的数据结构,程序会在效率和安全性上又很好的表现。
在JDK1.5后,加入了泛型支持,保证了添加元素的类型安全。列表中可以添加基本类型数据和引用类型。实际上,Java在添加基本类型,做了自动封箱操作,在取时,自动做了拆箱操作,也就是将基本类型数据,转化成封装类。基本类型和对象类型在jvm中占的内存大小,不一样,后者比前者大至少3-4倍。另外,拆、封箱的计算量也是消耗。在选择是使用数组,还是高级数据结构时,需要根据使用情况考虑
0.Array
- 数组属于,Java数据类型:8种基本类型、引用类型。其中的引用类型;
- 数组的初始化,静态和动态初始化;
- 数组在内存种是连续的,这一性质决定了,数组随机访问的快速性(通过下标)
- 数组可以存放基本类型数据,也可以存放对象类型数据
- 其他高级数据结构,基本由数组或链表构成
- Arrays工具类的使用
/**
* 1.Arrays工具类的使用。在Java JDK1.8 中提供的很多数据结构,
* 如:ArrayList,HashMap 等有数组实现的数据容器中,容器的扩容,
* 其实就是数组的扩容
*/
private void testArrays(){
int [] arr1=new int[]{1,2,3,4,5,6,7,8,9};
int [] arr2=new int[]{1,2,3,4,5,6,7,8,9,10,11,12,13};
//2.二分查找,数组中元素 8
int pos= Arrays.binarySearch(arr1,8);
//3.复制到长度2,得到一个新数组
int[] cArr= Arrays.copyOf(arr1,2);
//4. 下标form 3 to 5 这一区间
int[] crArr= Arrays.copyOfRange(arr1,3,5);
//5.数组相等, equals 三部曲
boolean isEqual=Arrays.equals(arr1,arr2);
Log.i("pos",""+pos);
Log.i("cArr",""+Arrays.toString(cArr));
Log.i("crArr",""+Arrays.toString(crArr));
Log.i("isEqual",""+isEqual);
}
打印结果:
09-08 03:41:51.943 6465-6465/com.example.kaiser.datastructure I/pos: 7
09-08 03:41:51.943 6465-6465/com.example.kaiser.datastructure I/cArr: [1, 2]
09-08 03:41:51.943 6465-6465/com.example.kaiser.datastructure I/crArr: [4, 5]
09-08 03:41:51.943 6465-6465/com.example.kaiser.datastructure I/isEqual: false
1.Colloection
1.1List
- Arraylist
底层实现是数组,所以在随机访问,效率比较快。 - LinkedList
底层链表 - Vector
线程安全的
1.2Set
无序,元素不可重复
- SortSet
- TreeSet
- LinkedHashSet
1.3Queue
2.Map
数组加链表的实现
网友评论