java 数据集合(setmaplist)
Posted yuanGrowing
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 数据集合(setmaplist)相关的知识,希望对你有一定的参考价值。
1、list 1.1分类 list分为ArrayList和LinkedList,这两者都实现了List接口,但是这两个只有这本质的区别,ArrayList底层使用的是数组, 而LinkedList 底层 使用的是链表。显然,由于这个区别,两者的使用场景和效率都有很大的不同。 1.2 ArrayList 先看一下它的类图,继承自AbstractList,实现了6个接口,这里要说一下Collection和Iterable。Collection接口是java中集合类 型数据的必要接口,Iterable接口允许我们使用foreach的方法来遍历集合。
ensure
Capacity(int x)函数来确保本身容量够大。每一次向ArrayList里面添加数据的时候,会
调用ensureCapacity(int x)看是否需要加大容量,如果要,那么就计算原长度的1.5倍然后加1,假设这个值为y,比较
参数x和y的大小,使用大的值作为ArrayList新的容量。而这里容量的改变是通过数组的新建和拷贝来完成的。在底层新建一
个数组,然后将ArrayList原来的数据拷贝过去,这样就完成了容量的增加。在即将添加大量数据的时候,可以通
过ensureCapacity这个函数设置一个大一点的容量,一次来减少之后添加大量数据时的拷贝等操作。
(3)关于同步。ArrayList不是线程安全的,如果在多线程中使用ArrayList作为共享变量,必须要在调用的时候做好同步操作,
或者在创建的时候使用 Collections.synchronizedList方法( List list = Collections.synchronizedList(new ArrayList(...)); )。
(4)快速失败机制:此类的 iterator 和 listIterator 方法返回的迭代器是快速失败的,在创建迭代器之后,除非通过迭代器自
身的 remove 或 add 方法从结构上对列表进行修改,否则在任何时间以任何方式对列表进行修改,迭代器都会抛出
ConcurrentModificationException。因此,面对并发的修改,迭代器很快就会完全失败,而不是冒着在将来某个不确定时间
发生任意不确定行为的风险。
1.3 LinkedList
和ArrayList的功能不同,ArrayList更多的作为类似于可变长数组来进行使用,而LinkedList一般作为队列或者栈来使用。看下面
的实现类图,它实现了Deque(双端队列接口)和Queue(队列接口)

TreeSet treeSet = new TreeSet(new Comparator() public int compare(Object o1, Object o2) Dog a = (Dog) o1; Dog b = (Dog) o2; return a.age>b.age?-1:(a.age == b.age?0:1) ; ); Dog a = new Dog(); a.setAge(1); a.setName("a"); Dog b = new Dog(); b.setAge(2); b.setName("b"); Dog c = new Dog(); c.setAge(3); c.setName("c"); treeSet.add(a); treeSet.add(b); treeSet.add(c); Iterator iterator = treeSet.iterator(); while (iterator.hasNext()) Dog dog = (Dog) iterator.next(); System.out.println(dog.name); |
c b a |
以上是关于java 数据集合(setmaplist)的主要内容,如果未能解决你的问题,请参考以下文章