Java容器-List和Set
来源:互联网 发布:写简谱的软件 编辑:程序博客网 时间:2024/05/29 12:51
1 List
List接口是Collection接口的子接口,从其名称可以看出,是一个元素有序(并不是按大小排序,具有顺序索引,类似于数组),默认按照元素的添加顺序设置元素的索引。可分为ArrayList、LinkedList和Vector。List集合特有的迭代器:ListIterator(是Iterator的子接口)
1.1 ArrayList
ArrayList底层通过数组实现,是线程非安全的,查询速度快,添加删除比较慢,初始长度为10,可根据添加/删除元素动态改变大小。
//在指定索引处增加元素 public void add(int index, E element) { //检查索引是否在数组大小范围内 rangeCheckForAdd(index); //确保添加一个元素后,元素个数不会超过数组大小,如果超过了则动态增加数组大小 ensureCapacityInternal(size + 1); // Increments modCount!! //把从index开始的元素后移一位 System.arraycopy(elementData, index, elementData, index + 1, size - index); elementData[index] = element; size++; }
//存储空间增加 private void grow(int minCapacity) { // overflow-conscious code int oldCapacity = elementData.length; int newCapacity = oldCapacity + (oldCapacity >> 1); if (newCapacity - minCapacity < 0) newCapacity = minCapacity; if (newCapacity - MAX_ARRAY_SIZE > 0) newCapacity = hugeCapacity(minCapacity); // minCapacity is usually close to size, so this is a win: elementData = Arrays.copyOf(elementData, newCapacity); }
private static int hugeCapacity(int minCapacity) { if (minCapacity < 0) // overflow throw new OutOfMemoryError(); return (minCapacity > MAX_ARRAY_SIZE) ? Integer.MAX_VALUE : MAX_ARRAY_SIZE; }
1.2 LinkedList
LinkedList实现了List接口,底层通过链表实现,允许null元素。此外LinkedList提供额外的get,remove,insert方法在LinkedList的首部或尾部。这些操作使LinkedList 可被用作堆栈(stack),队列(queue)或双向队列(deque)。
注意LinkedList没有同步方法,线程非安全。如果多个线程同时访问一个List,则必须自己实现访问同步。一种解决方法是在创建List时构造一个同步的List:
List list = Collections.synchronizedList(new LinkedList(…));
1.3 Vector
底层通过数组实现,线程安全的,增删查都比较慢。Vector还提供了Stack子类,实现了“栈”这一数据结构。因此Stack也是线程安全的,性能较差,可以通过使用LinkedList来实现栈。
0 0
- Java容器-List和Set
- Java容器类List和Set分析
- Java容器类List和Set分析
- java容器中list和set总结
- Java容器分析--List和Set
- java容器List和set的分析
- Java容器类List和Set比较
- Java容器类List和Set分析
- Java容器分析--List和Set
- JAVA,List,Map,Set,容器
- JAVA,List,Map,Set,容器
- JAVA,List,Map,Set,容器
- JAVA,List,Map,Set,容器
- JAVA,List,Map,Set,容器
- 两种Java容器类List和Set分析
- 两种Java容器类List和Set分析
- 两种Java容器类List和Set分析
- 两种Java容器类List和Set分析
- FastRCNN 训练自己数据集(一)——编译配置
- 近几年目标跟踪算法发展综述(上)
- Docker网络详解-一
- Spring 3之MVC & Security简单整合开发(二)
- 获取系统内安装程序列表
- Java容器-List和Set
- 测试libcurl库是否正确安装
- 连接 虚拟机 linux 网卡配置
- 垂直网络广告
- CardView
- Prototypes analyze
- /usr/bin/env: ‘python’: No such file or directory
- Spring注解@Resource和@Autowired区别对比
- Runtime运行时