java中常用集合总结
介绍集合之前先介绍一下迭代器,(迭代器跟集合有千丝万缕的关系,懂程序的…不多说了,不知道的看看书)。
简化对集合的操作,主要功能是遍历并选择集合中的对象,其中有三个最要的方法:1、hasNext() 返回布尔值 看集合中还有没有元素
2、next() 返回下一个元素 返回的是O的所一定要强转一下
3、remove() 元素删除接口 Iterator:
构建一个Iterator迭代器 –>Iterator iterator=所要进行迭代的集合对象.iterator()。接口 Enumeration: 注意=====Enumeration已经不是主流,Iterator是它的下一代替代品
构建一个Enumeration迭代器–>Enumeration enumeration=所要进行迭代的集合对象.elements()
- Map接口
Map集合提供了按照“键值对”存储元素的方法,一个键唯一映射一个值。集合中“键值对”整体作为一个实体元素时,类似List集合,但是如果分开来年,Map是一个两列元素的集合:键是一列,值是一列。与Set集合一样,Map也没有提供随机访问的能力,只能通过键来访问对应的值。
Map的每一个元素都是一个Map.Entry,这个实体的结构是< Key, Value >样式。 - HashMap
HashMap实现了Map接口,但它是非线程安全的。HashMap允许key值为null,value也可以为null,HashMap去掉了HashTable的contains方法,但是加上了containsValue()和containsKey()方法。
HashMap 一个速度最快的容器,此类不保证映射的顺序,特别是它不保证该顺序恒久不变,不是线程同步,看以下用法
public static void testHashMap(){
HashMap hashmap = new HashMap();
hashmap.put("0","c");
hashmap.put("1","a");
hashmap.put("2","b");
hashmap.put("3","a");
//存放对象用put方法 记住所存的一定是键值对
System.out.println(hashmap);
//该容器有其内部的排序方式 事实上是依据哈希算法来排的
Set set = hashmap.keySet();
//获取全部键 它的返回类型是set
Iterator iterator=set.iterator();
while(iterator.hasNext()){
System.out.print(hashmap.get(iterator.next()));
//获取迭代出来的元素
}
}
- HashTable
Hashtable也是Map的实现类,继承自Dictionary类。它与HashMap不同的是,它是线程安全的。而且它不允许key为null,value也不能为null,由于它是线程安全的,在效率上稍差于HashMap。
Hashtable 任何非 null 对象都可以用作键或值,现在用得不多啦,一个完全可以由其他容器替换的老容器类型 ,看以下用法:
public static void testHashTable(){
Hashtable hashtable=new Hashtable();
hashtable.put("0","c");
hashtable.put("1","a");
hashtable.put("3","c");
hashtable.put("2","b");
System.out.println("\nHashtableEntity:");
//注意与之对应的迭代器是Enumeration,而不是Iterator
Enumeration enumeration=hashtable.elements();
while(enumeration.hasMoreElements()){
System.out.println(enumeration.nextElement());
}
}
4.Set接口
Set是不能包含重合元素的容器,其实现类有HashSet,继承于它的接口有SortedSet接口等。Set中提供了加、减、和交等集合操作函数。Set不能按照索引随机访问元素,这是它与List的一个重要区别。
检索元素效率低下,删除和插入效率高,插入和删除不会引起元素位置改变。
5.HashSet
HashSet实现了Set接口,其内部是采用HashMap实现的。放入HashSet的对象最好重写hashCode、equals方法,因为默认的这两个方法很可能与你的业务逻辑是不一致的,而且,要同时重写这两个函数,如果只重写其中一个,很容易发生意想不到的问题。
6.TreeSet
TreeSet同样的Set接口的实现类,同样不能存放相同的对象。它与HashSet不同的是,TreeSet的元素是按照顺序排列的,因此用TreeSet存放的对象需要实现Comparable接口。
以下用法:
public static void testTreeSet(){
TreeSet treeset=new TreeSet();//自动排序内容
treeset.add("b");
treeset.add("a");
treeset.add("c");
treeset.add("d");
System.out.println("TreeSet down");
System.out.println(treeset);
System.out.println(treeset.first());//返回第一个元素
Iterator iterator=treeset.iterator();
while(iterator.hasNext()){
System.out.print(iterator.next()+";");
}
}