Java容器类

从上图可以看出容器类的结构。
Collection 接口定义了存取一组对象的方法,其子接口Set和List分别定义了存储方式。
- Set中的数据对象没有顺序且不可重复。
- List中的数据对象有顺序且可以重复。
- Map接口定义了 存储键“key”— 值“value”映射对 的方法。(key不可重复)
这里的重复指其中的存储的值不可以有相同的。系统会自动调用(值所在)类的equal方法判断。 如需要去掉重复的几何元素,可以重写该方法。(重写了equal方法必须重写hashcode方法,目前不太明白为啥)
在Map存储键值对的时候, 键key有可能是一个对象,那么查找起来可能比较麻烦。 注意:相同的对象,哈希码一定相同。 可以使用哈希码”直接找到key的索引对象。 可以调用Object 的 hashCode() 方法得到哈希码。 如需要可以重写该方法。
LinkedList(实现) 是以“链表”的形式做的底层存储空间,因此它适合于在链表中间需要频繁进行插入和删除操作。 (一个内存空间存储值并且指向另一个空间,依次类推形成一个“链表”)。
ArrayList(实现) 是以“数组”的形式做的底层存储空间。因此它的随机访问速度极快
由于以上底层存储空间的不同,所以遍历 集合 也需要不同的实现方法。 使用迭代器Iterator(接口),不同的类(LinkedList、ArrayList)会有不同的实现。
对于有序的集合(实现List接口的类),可以使用get(下标);进行遍历。 对于无序的集合,需要使用迭代器Iterator。 如下: //方法一: List list = new LinkedList(); list.add(“123″); list.add(“349999″);
Iterator i =list.iterator(); while (i.hasNext()) { String d = i.next().toString(); System.out.println(d); } //方法二: for (Iterator it = list.iterator();it.hasNext();) { it.next(); it.remove(); System.out.println(it.next()); } //方法三: for (Object obj : list) { …… } 是用foreach不可以修改 “obj” 的值。
Collections类 提供了一些关于List的常用算法

如果要调用Collecctions的sort()方法,则必须将list对象中的类实现Comparable接口。 当你调用Collections.sort();方法时,系统会去自动调用自己的Comparable的接口。
Map、HashMap的遍历:
Map的遍历: Map <String, String> hash=new HashMap <String, String> (); hash.put( “001 “, “北京 “); hash.put( “002 “, “上海 “); hash.put( “003 “, “天津 “); for(Map.Entry <String, String> entry : hash.entrySet()) { System.out.println(entry.getKey() + ” –> ” + entry.getValue()); }
HashMap遍历: HashMap hash = new HashMap(); hash.put(“001 “, “北京 “);// “001”为键,“北京”为值。 hash.put(“002 “, “上海 “); hash.put(“003 “, “天津 “); Iterator it = hash.keySet().iterator();// 这是取得键对象 while (it.hasNext()) { Object o = it.next(); System.out.println(“it.Next数据的值是: ” + o.toString() + hash.get(o)); // 获得键所对应的值。 }