List接口

List 接口

常见的实现类:ArrayList、LinkedList、vector

List 排序:

  • 使用 List 自带的 sort() 方法
  • 使用 Collection.sort() 方法

Arrays.aslist((T... a):可以将多个相同类型的数据转化为长度固定的列表

注意:该方法强调了列表的长度是固定的,因此不能使用 List 中的 add 和 remove 方法修改 List 长度,否则会报

UnsupportedOperationException 异常

List和Array的相互转换

  • List ---> Array
List<String> list = new ArrayList();
list.add("hello");
list.add("world");
//不传参数,只能转为Object类型的数组
Object[] objects = list.toArray();
//传了参数,就可以转化成对应的类型
String[] arr ={};
String[] array = list.toArray(arr);
  • Array --->List
String[] array = {"hello","world"};
List<String> list = Arrays.asList(array);

ArrayList

基于数组的实现,在内存中分配连续空间,读取快,修改慢,非线程安全,效率高

  • 底层结构是数组,且数组默认长度10必须使用 add 方法之后才为10,不然为 0

  • 可以通过有参构造函数指定数组长度

    List list1 = new ArrayList()		//数组长度默认为0
    list1.add("hello");					//执行完add方法之后默认长度才变为10
    
    List list2 = new ArrayList(15)		//数组长度直接为15,不用执行add方法
    

    注意: 底层数组长度默认为0,但执行了add方法后默认就变为10了

  • 扩容机制

执行 add 方法的时候,在添加元素之前会先比较元素的个数底层数组的大小,如果相等,则会进行扩容,扩容之后再添加,如果不相等则直接添加

扩容的本质:创建一个长度为原来1.5倍的新数组,并且将旧数组的数据复制到新数组

elementData = Arrays.copyOf(elementData,newCapacity(minCapacity));
newCapacity = oldCapacity + ( oldCapacity >> 1 )	//jdk1.8
newCapacity = ( oldCapacity * 3 ) / 2 +1			//jdk1.6

LinkedList

底层采用了链表的形式存储,用双指针实现了队列的数据结构(先进先出),读取慢,修改快,线程不安全

vector

Vector的底层也是通过数组实现的,查询快,增删慢 , 线程安全,但是效率低

  • 底层数组默认大小也为10,但是不用执行add方法,而是在创建时长度就为10
  • 扩容机制与 ArrayList 相似,有一点不同,它可以设置扩容时的容量增长大小(默认新数组长度为原来的2倍)
//默认情况,capacityIncrement = 0,即新长度变为原来的2倍
int newCapacity = oldCapacity + ((capacityIncrement > 0) ?
                                         capacityIncrement : oldCapacity);

List接口

上一篇:python 学习笔记二十 django项目bbs论坛


下一篇:基于jQuery,bootstrap的bootstrapValidator的学习(一)