06_容器
1 Collection()接口 (容器)
为什么要有容器?
答:因为数组的长度一旦指定,程序执行的过程中不能改变,因此出现了容器,大小可以任意改变。
Collection是一个接口,它有两个子接口:Set()和List()
2 Set() 接口
Set() 代表一个集合,它里面的内容是无序而且唯一的;
Set() 接口中有一个重要类:HashSet()
hashSet():哈希码最大的特点就是无序,查找速度最快。
3 List() 接口
List() 代表一个有序长度可变的数组,它里面的内容可以重复;
List() 接口中有两个重要类:ArrayList()和LinkedList()
ArrayList() 它的内存地址是连续的;因此它的查找速度快,而更新慢。
LinkedList() 他的内存地址是不连续的;因此他它的更新速度快,而查找慢。
4 Iterator()接口(容器的迭代器)
所有实现了Collection接口的类都有一个Iterator()方法,这个方法会得到一个实现了Iterator接口的类的对象。
for(Iterator i = List.iterator();i.hasnext();){
Object o = i.next();
System.println.out(o);
}
List虽然有索引,但是也必须用迭代器来实现循环
5 Comparable()接口
所有可以“排序”的类都实现了java.lang.Comparable接口,Comparable接口中只有一个方法:
public int compareTo(Object obj);
该方法:返回 0 表示 this==obj;
返回整数表示 this > obj;
返回负数表示 this < obj;
实现了Comparable 接口的类通过实现compareTo方法,从而确定该类对象的排序方式。
6 Map() 接口
为什么会出现Map?
答:因为HashSet没有索引,不方便通过索引来对容器进行操作,所以出现了Map。所以其实Map就是在Set的基础上加了索引,并且索引可以自定义。
实现Map接口的类用来存储“键—值”对。
Map接口的实现类有HashMap和TreeMap等。
Map类中存储的“键—值”通过键来标识,所以键值不能重复。
常用方法:
Object put(Object key,Object value);
Object get(Object key);
Object remove(Object key);
boolean containsKey(Object key);
boolean containsValue(Object value);
int size();
boolean isEmpty();
void putAll(Map t);
void clear();
示例代码:
import java.util.*;
public class Test {
public static void main(String[] args){
Map m1 = new HashMap();
Map m2 = new TreeMap();
m1.put("one",new Integer(1));
m1.put("two",new Integer(2));
m1.put("three",new Integer(3));
m2.put("A",new Integer(1));
m2.put("B",new Integer(2));
System.out.println(m1.size());
System.out.println(m1.containsKey("one"));
System.out.println(m2.containsValue(new Integer(1)));
if(m1.containsKey("two")){
int i = ((Integer)m1.get("two")).intValue();
System.out.println(i);
}
Map m3 = new HashMap(m1);
m3.putAll(m2);
System.out.println(m3);
}
}
Map的迭代(两种方法)
(1)Set<E> keySet()
(2)Map中保存的是Entry。
Entry代表一对“键—值”对,它看上去是Map的一种属性
Set<Map.Entry<String,String>> entrys = map.entrysSet();
getKey();
getValue();
示例代码:
public static void main(String[] args) {
Map<String,String> map = new HashMap<String,String>();
Set<Map.Entry<String,String>> entrys = map.entrySet();
for(Iterator<Map.Entry<String,String>> i = entry.iterator();i.hasNext()) {
Map.Entry<String,String> entry = map.entry();
}
}
7 Collections()类
只对List有作用,里面提供了一些方法来对List进行操作
8增强for循环
for(int n:nums){}
缺点:不能方便地操作索引,只适用于简单的遍历
如果增强for循环里面的是迭代器,它会默认使用iterator()
9泛型
用来指定当前容器只能放置什么样的类型数据。
为什么会有泛型?
答:因为装入即集合的类型都被当做Object类型对待,从而失去自身的实际类型,当要恢复自身类型时,往往需要转型,这样做效率低,并且容易产生错误。
解决办法:
在定义集合的时候同时定义集合中对象的类型。
有两种指定方法:1.在定义Collection的时候指定;2.在循环时用Iterator指定。
泛型的好处:增强程序的可读性和稳定性。
泛型语法:
List<Person> List = new ArrayList<Person>
浙公网安备 33010602011771号