集合类二

 
11.22

 

Map集合

 

前面讲的Collection集合均属于单列集合,Map集合属于双列集合
键属于一个集合,通过键来get值;
键、值这种映射关系也可以组成一种集合;
但我们必须保证键的唯一性

 

Map集合的两种遍历方式
通过keySet方法返回由键组成的集合,迭代该集合的元素就拿到了所有的键,再调用get方法根据键拿到值
通过entrySet方法返回键值映射关系组成的集合,迭代该集合就拿到了一个个的键值映射关系,
通过getKey方法拿到键,通过getValue方法拿到值

先来说说Map接口下的两个集合类


一、HashMap
线程不安全,存取速度快,允许存放null键,null值。
通过HashSet原理保证键唯一性
public class Person {
 private String name;
 private String sex;
 public Person(String name, String sex) {
  this.name = name;
  this.sex = sex;
 }
 public String getName() {
  return name;
 }
 public void setName(String name) {
  this.name = name;
 }
 public String getSex() {
  return sex;
 }
 public void setSex(String sex) {
  this.sex = sex;
 }

 @Override
 public String toString() {
  // TODO Auto-generated method stub
  return name + "--" + sex;
 } 
}

 

import java.util.HashMap;
import java.util.Iterator;
import java.util.Set;
import java.util.Map;

 

public class HashMapTest {
 public static void main(String[] args) {
  HashMap<Person, Integer> hm = new HashMap<Person, Integer>();
  hm.put(new Person("zhao", "nan"), 28);
  hm.put(new Person("qian", "nv"), 35);
  hm.put(new Person("sun", "nv"), 19);
  hm.put(new Person("li", "nan"), 23);
  hm.put(new Person("liu", "nan"), 42);
  
  /*遍历方式1
    *通过keySet方法返回由键组成的集合,迭代该集合的元素就拿到了所有的键,
    *再调用get方法根据键拿到值
  */
  Set<Person> set = hm.keySet();
  Iterator<Person> iter = set.iterator();  
  while(iter.hasNext()) {
   Person key = iter.next();
   int value = hm.get(key);
   System.out.println(key + "--" + value);
  }
  
  /*遍历方式2
   * 通过entrySet方法返回键值映射关系组成的集合,迭代该集合就拿到了一个个的键值映射关系,
   *通过getKey方法拿到键,通过getValue方法拿到值
  */
  Set<Map.Entry<Person, Integer>> set = hm.entrySet();
  for(Map.Entry<Person, Integer> me : set) {
   Person key = me.getKey();
   int value = me.getValue();
   System.out.println(key + "--" + value);
  }
 } 

 

 

二、TreeMap
通过二叉树算法保证键唯一性,对键进行排序,排序原理与TreeSet相同。
借用hashMap中的Person类写如下代码:
 
import java.util.Comparator;
import java.util.Set;
import java.util.TreeMap;

public class TreeMapTest {
 public static void main(String[] args) {
  TreeMap<Person, Integer> tm = new TreeMap<Person, Integer>(new Comparator<Person>(){
   public int compare(Person p1, Person p2) {
    int num = p1.getName().compareTo(p2.getName());
    if(num!=0)
     return num;
    return p1.getSex().compareTo(p2.getSex());
   }   
  });
  tm.put(new Person("zhao", "nan"), 28);
  tm.put(new Person("qian", "nv"), 35);
  tm.put(new Person("sun", "nv"), 19);
  tm.put(new Person("liu", "nv"), 23);
  tm.put(new Person("liu", "nan"), 42);
  
  Set<Person> set = tm.keySet();
  for(Person key : set) {
   int value = tm.get(key);
   System.out.println(key + "--" + value);
  }    
 }
}

 

 

三、properties
HashSet的子类,所以也是线程安全的
用于读写配置文件的,一般配置项等号两边都是String,所以该集合中的两列保存的都是String类型的数据
这个集合中只能存String,所以不需要定义泛型
1.首先创建一个properties类型的容器
单列集合多用add方法添加元素,双列集合用put方法,properties有自己的专门方法setProperty来添加
取元素和HashMap、TreeMap一样
public class PropertiesTest {
 public static void main(String[] args) throws IOException {
  //向Properties集合存放元素
  Properties prop = new Properties();
  prop.setProperty("zhang", "19");
  prop.setProperty("li", "21");
  prop.setProperty("zhang", "21");
  prop.setProperty("wang", "27");
  prop.setProperty("liu", "32");
  
  //取元素,调用父类的方法
  Set set = prop.keySet();
  for(Object key : set)
   System.out.println(key + "=" + prop.get(key));

  //用枚举取元素
  Enumeration<String> e = (Enumeration<String>) prop.propertyNames();
  while(e.hasMoreElements()) {
   String key = e.nextElement();
   String value = prop.getProperty(key);
   System.out.println(key + "=" + value);
  }
 }
}
关于properties,用的最多的还是读取配置文件,明天再写吧...

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(String,properties,HashMap,Integer,Class,import)