开篇
之前写过一篇java的数据结构,里面的内容有点不够清晰,今天在这边整理出java标准库里面的一些数据结构,也就是java中的集合。主要是为了实际的应用,所以如果想看源码解析的童鞋可以关闭这篇博客了。
collection接口
盗张图,很好的展示了collection
List
ArrayList
ArrayList a = new ArrayList();
a.add("xiao");
a.add("fei");
a.add("java");
System.out.println(a);
List<Integer> b = new ArrayList(4);
b.add(4);
b.add(3);
b.add(2);
b.add(1);
System.out.println(b);
List<Integer> c = new ArrayList(Arrays.asList(1,2,3,4,5,6));
System.out.println(c);
常用方法示例
import java.util.*;
public class ListTest
{
public static void main(String[] args)
{
List books = new ArrayList();
//向books集合中添加三个元素
books.add(new String("轻量级Java EE企业应用实战"));
books.add(new String("疯狂Java讲义"));
books.add(new String("疯狂Android讲义"));
System.out.println(books);
//将新字符串对象插入在第二个位置
books.add(1 , new String("疯狂Ajax讲义"));
for (int i = 0 ; i < books.size() ; i++ )
{
System.out.println(books.get(i));
}
//删除第三个元素
books.remove(2);
System.out.println(books);
//判断指定元素在List集合中位置:输出1,表明位于第二位
System.out.println(books.indexOf(new String("疯狂Ajax讲义"))); //①
//将第二个元素替换成新的字符串对象
books.set(1, new String("LittleHann"));
System.out.println(books);
//将books集合的第二个元素(包括)
//到第三个元素(不包括)截取成子集合
System.out.println(books.subList(1 , 2));
}
LinkedList
LinkedList 与 ArrayList 一样实现 List 接口,只是 ArrayList 是 List 接口的大小可变数组的实现,LinkedList 是 List 接口链表的实现。基于链表实现的方式使得 LinkedList 在插入和删除时更优于 ArrayList,而随机访问则比 ArrayList 逊色些。
LinkedList 实现所有可选的列表操作,并允许所有的元素包括 null。
除了实现 List 接口外,LinkedList 类还为在列表的开头及结尾 get、remove 和 insert 元素提供了统一的命名方法。这些操作允许将链接列表用作堆栈、队列或双端队列。
此类实现 Deque 接口,为 add、poll 提供先进先出队列操作,以及其他堆栈和双端队列操作。
所有操作都是按照双重链接列表的需要执行的。在列表中编索引的操作将从开头或结尾遍历列表(从靠近指定索引的一端)。
同时,与 ArrayList 一样此实现不是同步的。
set
Hashset
可以解决寻找数组中第一个重复数的问题,但是需要额外的空间,如果不允许额外空间,就要像剑指offer里面那样。