1. 集合接口
集合类的基本接口是Collection接口。Collection接口扩展了Iterable接口(迭代器),所以任何集合都可以使用for each循环。Collection接口提供了很多实用方法,所有实现类都必须实现这些方法。(具体方法请查看API文档)
2. 具体的集合
下表展示了Java类库中的集合(不包括线程安全集合),以Map结尾的类实现了Map接口,其他类实现了Collection接口。
结合类型 | 描述 |
ArrayList | 一种可以动态增长和缩减的索引序列 |
LinkedList | 一种可以在任何位置进行高效插入和删除操作的有序序列 |
ArrayDeque | 一种用循环数组实现的双端队列 |
HashSet | 一种没有重复元素的无序集合 |
TreeSet | 一种有序集 |
EnumSet | 一种包含枚举类型值的集 |
LinkedHashSet | 一种可以记住元素插入次序的集 |
PriorityQueue | 一种允许高效删除最小元素的集合 |
HashMap | 一种存储键/值关联的数据结构 |
TreeMap | 一种键值有序排列的映射表 |
EnumMap | 一种键值属于枚举类型的映射表 |
LinkedHashMap | 一种可以记住键/值项添加次序的映射表 |
WeakHashMap | 一种其值无用武之地后可以被垃圾回收器回收的映射表 |
IdentityHashMap | 一种用==而不是用equals比较键值的映射表 |
① 链表:LinkedList
Java中所有链表都是双向链接的,LinkedList类的listIterator方法返回一个迭代器对象,可以反向遍历,可以使用add()方法添加元素(iterator()方法返回的迭代器对象不能使用add()方法)。LinkedList中的set()、get()方法不能随机访问,只能从头访问。如果需要随机访问集合,就使用数组或ArrayList。
实例:public class LinkedListTest
{
Public static void main(String[] args)
{
List<String> a = new LinkedList<>();
a.add(“Amy”);
a.add(“Carl”);
a.add(“Erica”);
List<String> b = new LinkedList<>();
b.add(“Bob”);
b.add(“Doug”);
b.add(“Frances”);
b.add(“Gloria”);
ListIterator<String> aIter = a.listIterator();
Iterator<String> bIter = b.iterator();
//合并a、b
While(bIter.hasNest())
{
If(aIter.hasNext()) aIter.next();
aIter.add(bIter.next());
}
System.out.println(a);
//隔一个删除
bIter = b.iterator();
while(bIter.hasNext())
{
bIter.next();
if(bIter.hasNext())
{
bIter.next();
bIter.remove();
}
}
System.out.println(b);
//从a中删除b
a.removeAll(b);
System.out.println(a);
}
}
② 数组列表 ArrayList
③ 散列集 HashSet
只有不关心集合中元素顺序时才应该使用HashSet。
Public class SetTest
{
Public static void main(String[] args)
{
Set<String> words = new HashSet<String>();
Long totalTime = 0;
Scanner in = new Scanner(System.in);
Whiel(in.hasNext())
{
String word = in.next();
Long callTime = System.currentTimeMills();
Words.add(word);
totalTime += callTime;
}
Iterator<String> Iter = words.iterator();
For(int i=0;i<=20&&Iter.hasNext();i++)
System.out.println(Iter.next());
System.out.println(…);
System.out.println(words.size()+” distinct5 words”+totalTime+”milliseconds.”)
}
}
④ 树集TreeSet
树集是一个有序集合。
SortedSet<String> sorter = new TreeSet<>();
Sorter.add(“1”);
Sorter.add(“2”);
Sorter.add(“3”);
For(String s : sorter) System.out.print(s);
要实现插入树集中元素的比较大小,就需要插入的对象实现Comparable接口。但是如果要在不同的树集中使用不同的比较方式怎么办呢?或者类没有实现Comparable接口呢?可以将实现Comparator接口的对象传递给树集的构造器来使用不同的比较方法。
SortedSet<Item> sortBy = new TreeSet<>(new Comparator<Item>(){
Public int compare(Item a,Item b)
{
String A = a.getDescription();
String B = b.getDescription();
Return A.comparaTo(B);
});
⑤ 队列 java.util.Queue<E> java.util.Deque<E> java.util.ArrayDeque<E>
⑥ 优先级队列 PriorityQueue
插入到队列中的元素总是按照排序的顺序进行检索,优先级队列使用堆(heap)作为数据结构,一个可以自我调整的二叉树。与TreeSet一样,即可以保存实现了Comparable接口的类对象,也可以保存在构造器中实现了比较器的对象。
⑦ 映射表 HashMap TreeMap
Public class MapTest
{
Public static void main(String[] args)
{
Map<String,Employee> staff = new HashMap<>();
Staff.put(“12345”,new Employee(“wang”));
Staff.put(“12346”,new Employee(“li”));
Staff.put(“12347”,new Employee(“amy”));
Staff.remove(“12345”);
System.out.println(staff.get(“12346”));
For(Map.Entry<String,Employee> entry : staff.entrySet())
{
String key = entry.getKey();
Employee value = entry.getValue();
}
}
}
⑧ 专用集与映射表类
弱散列映射表 WeakHashMap
可以自动的将在映射表中不使用的键/值对删除掉。
链接散列集和链接映射表 LinkedHashSet LinkedHashMap
可以记住插入项的茶如顺序。
枚举集与映射表 EnumSet EnumMap
存储的是枚举类型,没有公共构造器,使用静态工厂方法。
标识散列映射表 IdentityHashMap
转载于:https://my.oschina.net/penger7/blog/795084