一、数组Array
1、数组在内存中是连续存储的,所以它的索引速度是非常快的,而且赋值和修改元素也很简单
2、申明数组时,必须同时指定数组的长度,数组的长度过长,会造成内存浪费,数组的长度过短,可能会造成数据溢出
3、数组只能存在类型一样的数据,(基本数据类型 或 引用类型)
int[] arr1 = {1,2,3,4,5,6,7,8};
System.out.println("arr1 = " + arr1);
System.out.println("Arrays.toString(arr1) = " + Arrays.toString(arr1));
int[][] arr2 = {{1,2,3,4},{5,6,7,8,9}};
for (int i =0;i<arr2.length;i++){
for (int j=0 ;j<arr2[i].length;j++){
System.out.println("arr2[i][j] = " + arr2[i][j]);
}
}
二、集合Collection,List,Set
1、JAVA集合只能存放引用类型的数据,不能存放基本数据类型,但是集合可以存放不同类型的引用类型,因为存入集合的元素都被转化成了Object 类型,之后再引用集合中的类型需要强制类型转换,这就导致了集合的类型不安全,以及类型转换的性能损耗
2、接口List,集Set,都继承了Collection接口,
线性是一种逻辑结构,数据结构中的除去守卫元素外,其他元素都有唯一的钱去和后继
3、List 和Set的区别
List特点:元素有放入顺序,元素可重复,
Set特点:元素无放入顺序,元素不可重复,
4、List有三大实现类:ArrayList,LinkedList,Vector
4.1、ArrayList底层是以数组实现
4.2、LinkedList是双向链表实现,适合于经常实现增删操作,但是查询和修改的效率没有ArrayList和Vector快,
4.3、ArrayList 和 Vector类似,也是数组实现,但是它是同步的,是线程安全的,不会有并发产生的问题,但是效率要低于ArrayList
三、ArrayList初始化(4中方式)
public void test(){
List list1 = new ArrayList();
list1.add(1);
list1.add(2);
list1.add(3);
List list2 = new ArrayList(){{
add(11);
add(22);
add(33);
}};
List list3 = Arrays.asList(111,222,333);
//list4中插入5个121212
List list4 = Collections.nCopies(5,121212);
}