java List集合

来源:互联网 发布:淘宝二手iphone能买吗 编辑:程序博客网 时间:2024/06/06 01:36

java List集合

List集合是一个元素有序,可以重复的集合,元素默认按照添加顺序设置其索引,集合可以通过索引来对集合中的元素进行操作。(索引从0开始)

ArrayList和Vector类

ArrayList和Vectory是List接口两个常用实现类,它们的底层都是数组,所以它们封装了一个动态允许再分配的Object[]数组,创建集合的时候可以指定数组的长度,如果放入集合的元素超过数组长度,数组的长度初始长度会自动增加。如果不指定集合长度,默认值是10。

ArrayList和Vector还提供了两个方法来重新分配Object[]数组

  1. void ensureCapacity(int minCapacity):
    将ArrayList和Vector集合的Object[]数组长度增加大于等于minCapacity值。

  2. void trimToSize():
    调整ArrayList和Vector集合的Object[]数组长度为当前元素个数。调用该方法可以减少集合对象占用的存储空间

ArrayList和Vector最显著的区别是:ArrayList是线程不安全的,Vector线程是安全的,所以Vector的性能比ArrayList低。Vector是比较古老一个集合,具有很多的缺点所以不推荐使用。

java操作数组有一个工具类Arrays,该工具类提供了asList(Object.. a)方法,该方法可以把一个数组转换成一个List集合,这个集合即不是ArrayList实现类的实例,也不是Vector实现类的实例,而是Arrays的内部类ArrayList的实例。Arrays.ArrayList是一个固定长度的List集合,改集合里的元素不可增加,删除,只能遍历。

public class Test{public static void main(String[] args){String[] array = {"aa", "bb", "cc"};List list = Arrays.asList(array);System.out.println(list);list.add("dd"); (1)System.out.println(array);}}

程序编译不会报错,但程序执行到(1)时会报java.lang.UnsupportedOperationException

LinkedList类

LinkedLsit也是List接口实现类,除此之外,还实现了Deque接口,可以被 当成双端队列来使用,因此即可以你被当成栈来使用,也可以当成队列使用。

public class Test{public static void main(String[] args){LinkedList linkedList = new LinkedList();linkedList.addFirst("0"); // 添加元素到列表开头linkedList.add("1"); // 在列表结尾添加元素linkedList.add(2,"2"); // 在指定位置添加元素linkedList.addLast("3"); // 添加元素到列表结尾System.out.println("LinkedList: "+ linkedList);System.out.println("getFirst():" + linkedList.getFirst()); // 返回此列表的第一个元素System.out.println("getLast(): "+ linkedList.getLast()); // 返回此列表的最后一个元素 System.out.println("removeFirst(): " + linkedList.removeFirst()); // 移除并返回此列表的第一个元素 System.out.println("removeLast():" + linkedList.removeLast()); // 移除并返回此列表的最后一个元素System.out.println("After remove:" + linkedList); System.out.println("contains(1) is :" + linkedList.contains("1")); // 判断此列表包含指定元素,如果是,则返回true System.out.println("size is : " + linkedList.size()); // 返回此列表的元素个数/************************** 位置访问操作 ************************/System.out.println("------------------位置访问操作-----------------------");linkedList.set(1, "3"); // 将此列表中指定位置的元素替换为指定的元素System.out.println("After set(1, 3):" + linkedList); System.out.println("get(1): " + linkedList.get(1)); // 返回此列表中指定位置处的元素/************************** Queue操作 ************************/System.out.println("------------------Queue操作-----------------------");System.out.println("peek():" + linkedList.peek()); // 获取但不移除此列表的头System.out.println("element(): " + linkedList.element()); // 获取但不移除此列表的头linkedList.poll(); // 获取并移除此列表的头System.out.println("After poll():" + linkedList);linkedList.remove();System.out.println("After remove():" + linkedList); // 获取并移除此列表的头linkedList.offer("4");System.out.println("After offer(4):" + linkedList); // 将指定元素添加到此列表的末尾 /************************** Deque操作 ************************/System.out.println("-----------------Deque操作 ------------------------");linkedList.offerFirst("2"); // 在此列表的开头插入指定的元素System.out.println("After offerFirst(2):" + linkedList);linkedList.offerLast("5"); // 在此列表末尾插入指定的元素System.out.println("After offerLast(5):" + linkedList);System.out.println("peekFirst(): "+ linkedList.peekFirst()); // 获取但不移除此列表的第一个元素System.out.println("peekLast(): "+ linkedList.peekLast()); // 获取但不移除此列表的第一个元素linkedList.pollFirst(); // 获取并移除此列表的第一个元素System.out.println("After pollFirst():" + linkedList);linkedList.pollLast();// 获取并移除此列表的最后一个元素System.out.println("After pollLast():" + linkedList);linkedList.push("2"); // 将元素推入此列表所表示的堆栈(插入到列表的头)System.out.println("After push(2):" + linkedList);linkedList.pop(); // 从此列表所表示的堆栈处弹出一个元素(获取并移除列表第一个元素)System.out.println("After pop():" + linkedList);}}
LinkedList: [0, 1, 2, 3]getFirst(): 0getLast(): 3removeFirst(): 0removeLast(): 3After remove:[1, 2]contains(1) is :truesize is : 2------------------位置访问操作-----------------------After set(1, 3):[1, 3]get(1): 3------------------Queue操作-----------------------peek(): 1element(): 1After poll():[3]After remove():[]After offer(4):[4]----------------Deque操作 ------------------------After offerFirst(2):[2, 4]After offerLast(5):[2, 4, 5]peekFirst(): 2peekLast(): 5After pollFirst():[4, 5]After pollLast():[4]After push(2):[2, 4]After pop():[4]

LinkedList底层是链表,所以查询性能较差,插入删除性能较好。ArrayList和Vector底层是数组,所以遍历查询性能较好,插入删除性能较差。但总的来说ArrayList的性能比LinkedList的性能要好,因此大部分的时候建议考虑使用ArrayList。

原创粉丝点击