什么是集合框架
我们或多或少掌握了许多的数据结构知识,有栈、队列、链表等,这些具体的数据结构通过JDK的开发者们的设计与实现,用JAVA语言编写了许多接口与实现类,这些统称为集合 框架。先研究怎么使用这些集合,再想着实如何实现的,最后再研究有没有更好的方法去改良优化这些集合的实现。
明确一点,集合是为我们使用的,所以在使用过程中要结合实际情况,让自己的代码更安全,更高效。加油,4.12 00点01分
JAVA集合类库将接口interface和实现implementation分离
集合类的基本接口
Collection
List
List是有序集合,元素采用add方法添加元素时,元素会添加到特定的位置,默认的是按照添加顺序。
如果想要访问List中的元素,List提供了2中方法。1.使用迭代器访问 2.使用整数索引来访问。
LinkedList
LinkedList是可以在任何未知高效率的插入和删除操作,我们平时操作的时候正常不会选择LinkedList,它有一个非常大的缺点:查找一个元素会变得非常的慢,这里在后面ArrayList的时候还会聊到。首先它是双链表结构,链表在插入删除方面特别高效,但是在查找方面就非常慢了,每一次查找都必须从链表头查询到所查元素。下图是双链表:
通过这张图能看出来,每一个节点都存放着前驱节点的引用。怎么用来看代码:
List<String> a = new LinkedList<>();
a.add("wangwei");
a.add("vivian");
a.add("wwang");
List<String> b = new LinkedList<>();
b.add("x");
b.add("y");
b.add("z");
b.add("o");
使用迭代器和其提供的方法可以遍历并且删除插入增加节点,有一点需要注意,任何一个长度为n的双链表LinkedList都有n+1个位置可以插入新节点,每选中一个节点插入的时候,都会在指向该节点的前方插入新节点。
ListIterator<String> aIter = a.listIterator();
Iterator<String> bIter = b.iterator();
//将bIter的元素全部并到aIter上
while (bIter.hasNext()){
if(aIter.hasNext())aIter.next();
aIter.add(bIter.next());
}
System.out.println(a);
//全部移除aIter的第二个元素
bIter = b.iterator();
while(bIter.hasNext()){
bIter.next();
if(bIter.hasNext()){
bIter.next();
bIter.remove();
}
}
System.out.println(b);
//从aIter中移除bIter中含有的全部元素
a.removeAll(b);
System.out.println(a);
最终输出的结果:
[wangwei, x, vivian, y, wwang, z, o]
[x, z]
[wangwei, vivian, y, wwang, o]