从Java集合汇总开始看起吧,重父类的Collection讲起。
- Map接口
- |----HashMap(类):Map的主要实现类
- |----LinkedHashMap(类):使用链表维护添加进Map中的顺序,遍历Map时,按照添加顺序遍历
- |----TreeMap(类): 按照添加进入Map中元素的key的指定属性排序。【自然排序,定制排序】。key必须是同一个类的对象。是同种类型的数据
- |----Hashtable(类):Hashtable是一个古老的Map实现类。线程安全。不建议使用
- |----Properties(类): 是Hashtable的子类,常用来处理属性文件。键和值都是String类型。
从HashMap讲解Map的添加,删除,遍历操作
- HashMap : Key 使用Set来存放的,不可重复。value用Collection存放的,可以重复。 一个对,是一个Entry,所有的Entry是Set存放的,不可重复。
- 向HashMap中添加元素时,会调用key所在类的equals()方法,判断两个key是否相同,如果相同,则只能添加上后添加那个元素。
Map—添加,删除操作:
/**
* Object put(Object key,Object value) 向map中添加一个元素
* Object remove(Object key) 按照指定的key,删除这一对<key,value>,返回值是key对应的value
* void putAll(Map t)
* void clear() 清空map
* Object get(Object key) 获取指定key对应的value值,如果没有此key,返回null
* boolean containsKey(object key) 判断是否包含某个key
* boolean containsValue(Object value) 判断是否包含某个value
* int size() 返回集合长度
* boolean isEmpty() 判空
* boolean equals(Object obj)
*/
@Test
public void test1() {
Map map = new HashMap();
map.put("AA", 15);
map.put("GG", 16);
map.put("BB", 10);
map.put(123, "HH");
map.put(null, 15);
map.put(null, null);
map.put(14, null);
System.out.println(map.size());
map.remove("BB");
System.out.println(map);
System.out.println(map.containsKey(123));
System.out.println(map.containsValue(null));
}
遍历Map
/**
* Set keySet() 遍历key
* Collection values() 遍历value
* Set entrySet() 遍历entry(key-value键值对)
*/
@Test
public void test2() {
Map map = new HashMap();
map.put("AA", 15);
map.put("GG", 16);
map.put("BB", 10);
map.put(123, "HH");
map.put(new Person("DD", 50), 89);
/**
* 1. 遍历key
* key存在Set中
*/
Set set = map.keySet();
for (Object obj : set) {
System.out.println(obj);
}
System.out.println("***************");
/**
* 2. 遍历value
* value存在Collection中
*/
Collection value = map.values();
for (Object obj : value) {
System.out.println(obj);
}
System.out.println("************");
/**
* 3. 遍历entry
* 方法一:
*/
Set set1 = map.keySet();
for (Object obj : set) {
System.out.println(obj + "---->" + map.get(obj));
}
System.out.println("************");
// 方法二:
Set set2 = map.entrySet();
for (Object obj : set2) {
Entry en = (Entry) obj;
System.out.println(en);
}
}
LinkedHashMap
@Test
public void test() {
Map map = new LinkedHashMap();
map.put("AA", 15);
map.put("GG", 16);
map.put("BB", 10);
map.put(123, "HH");
map.put(null, 15);
map.put(new Person("DD", 50), 89);
Set set = map.entrySet();
for (Object object : set) {
System.out.println(object);
}
}
TestTreeMap
/**
* 按照添加进入Map中元素的key的指定属性排序。
* 要求:key必须是同一个类的对象。是同种类型的数据
* 针对key:自然排序 vs 定制排序
*/
public class TestTreeMap {
/**
* 自然排序
*/
@Test
public void test() {
Map map = new TreeMap();
map.put(new Person("AA", 23), 89);
map.put(new Person("MM", 22), 95);
map.put(new Person("GG", 23), 55);
map.put(new Person("JJ", 13), 23);
Set set = map.keySet();
for (Object object : set) {
System.out.println(object + "=" + map.get(object));
}
}
/**
* 定制排序
*/
@Test
public void test1() {
// 匿名实现接口
Comparator com = new Comparator() {
@Override
public int compare(Object o1, Object o2) {
if (o1 instanceof Customer && o2 instanceof Customer) {
Customer c1 = (Customer)o1;
Customer c2 = (Customer)o2;
int i = c1.getId().compareTo(c2.getId());
if (i == 0) {
return c1.getName().compareTo(c2.getName());
}else {
return i;
}
}
return 0;
}
};
Map map = new TreeMap(com);
map.put(new Customer(15, "AA"), 20);
map.put(new Customer(10, "GG"), 21);
map.put(new Customer(26, "CC"), 2);
map.put(new Customer(26, "BB"), 2);
map.put(new Customer(5, "ZZ"), 69);
Set set = map.entrySet();
for (Object object : set) {
System.out.println(object);
}
}
}
Hashtable
/**
* Hashtable是一个古老的Map实现类。线程安全。不建议使用
* 不允许使用null值。不能保证key-value对的顺序。
* 判断key相等,value相等的标准与hashMap相同。
*/
Properties
/**
* Properties:是Hashtable的子类:
* 常用来处理属性文件。键和值都是String类型。
*/
// 使用Properties处理属性文件。
@Test
public void test() throws FileNotFoundException, IOException {
Properties pro = new Properties();
pro.load(new FileInputStream(new File("jdbc.properties")));
String user = pro.getProperty("user");
System.out.println(user);
String pwd = pro.getProperty("pwd");
System.out.println(pwd);
}