Array、ArrayList 和 LinkedList 都是 Java 容器类,用于存储对象。
Array 是一种最基本的、固定长度的数组,可以存储基本类型和引用类型,但数组长度固定,一旦创建就不能改变,无法动态扩容。因此在需要动态增加或减少元素的场景下,不适合使用 Array。
ArrayList 和 Vector 都是 Java 中的容器类,用于存储对象。它们的主要区别在于线程安全和性能。
ArrayList 是基于动态数组实现的容器类,可以存储任何对象类型。在添加或删除元素时,自动扩容和缩容,因此可以动态地增加或减少元素。ArrayList 支持随机访问,在读取元素时效率比较高,但在插入和删除元素时需要移动其他元素,效率较低。 ArrayList 不是线程安全的
Vector 是基于动态数组实现的容器类,也可以存储任何对象类型。在添加或删除元素时,自动扩容和缩容,因此可以动态地增加或减少元素。与 ArrayList 不同的是,Vector 是线程安全的,在多线程环境下使用可以保证线程安全。但是由于线程同步的开销,Vector 的性能比 ArrayList 差一些。
LinkedList 是基于链表实现的容器类,也可以存储任何对象类型。插入和删除元素时只需要改变指针,不需要移动其他元素,因此效率较高。LinkedList 不支持随机访问,需要顺序访问元素,效率较低。
因此,固定长度,用array, 如果需要随机访问元素,应该使用数组或 ArrayList。如果需要频繁插入和删除元素,并且不需要随机访问元素,应该使用 LinkedList. 如果不需要考虑线程安全,应该使用 ArrayList,因为它的性能比 Vector 好。如果需要线程安全,可以使用 Vector,但是需要注意性能问题。在 Java 5 以后,还可以使用并发集合类来实现线程安全的容器,例如 CopyOnWriteArrayList。
ArrayLlist 初始空间默认10 ,扩容系数1.5 ,如果超过空间增加50%。
LinkedList 没有初始空间,每个节点都有自己的空间。
Vector 初始默认是10.扩容系数2, 翻倍增加。
数组转String : Arrays.toString(arr)
数组复制方法:System.arraycopy(arr1,0,arr2,0,len); Arrays.copyOf(arr1,len);
数组转集合方法: Arrays.asList(arr5) // 转换后不能对list 做增删操作
Collections.addAll( ); List list= new ArrayList<>(); Collections.addAll(list,arr);
集合转数组方法: list.toArray(); list2.toArray(new String[list.size()]);(list 是指定类型)
@Test
public void test() throws Exception{
String[] arr1={"a","c","b",};
String[] arr2 =arr1;
System.out.println(arr1==arr2); // true
String[] arr3 = new String[3];
System.arraycopy(arr1,0,arr3,0,3);
System.out.println(Arrays.toString(arr3));
String[] arr4 = new String[5];
System.arraycopy(arr1,0,arr4,2,3);
System.out.println(Arrays.toString(arr4));
String[] arr5 = Arrays.copyOf(arr1,3);
System.out.println(Arrays.toString(arr5));
Arrays.sort(arr1);
System.out.println(Arrays.toString(arr1));
//数组转集合 Arrays.asList
List list = Arrays.asList(arr1); // 转换后的list 不能进行增删操作
Integer[] num = new Integer[]{1,2,3,4,5,6,7,8,9};
List<Integer> ans2 = new ArrayList<>();
Collections.addAll(ans2,num);
//集合转数组
Object[] arr6 = list.toArray();
System.out.println(Arrays.toString(arr6));
List<String> list2= new ArrayList<>();
list2.add("a1");
String[] arr7 = list2.toArray(new String[list.size()]);
System.out.println(Arrays.toString(arr7));
}