对HashMap、TreeMap的使用和理解
1-Map的整体框架
/*
一、
Map:双列数据,存储key--value对的数据
hashMap:(作为map的主要实现类);线程不安全,效率高;存储null的key和value
LinkedHashMap:保证在便利Map的时候,可以按照--添加顺序实现便利(怎么写的,怎么便利)
treeMap:保证按照(key)/(定制)来实现--便利的操作
Hashtable:古老实现类;线程安全,效率低;不能储存null的key和value (已经out了)
Properties:处理配置文件,key和vaule都是String类型
二、
Map结构的理解
Map中的key:无序、不可重复、使用set存储所有的key
Map中的value:无序、可重复,使用Collection来存储所有的value
一个键值对:key--value构成一个Entry的对象
Map中的Entry:无序、不可重复,使用set存储entry
三、HashMap的常用方法
增:put(Object key ,Object value)
删:remove(Object key)
改:put(Object key ,Object value)
查:get(Object key)
长度:size();
便利:keySet()/values()/entry()
*/
2- HashMap的常用方法
public class About_HashMap__Understand {
@Test
public void MapTest1() {
//三、SashMap的常用方法
HashMap map = new HashMap();
//1-添加
map.put("AA", 123);
map.put("BB", 13);
map.put("ACC", 23);
//2-修改(当key一样的时候,就是修改)
map.put("AA", 9999999);
System.out.println(map);
//3-putAll 把一个集合放在另一个集合A.putAll(B) --- > 把集合B的内容,放到集合A中
HashMap map1 = new HashMap();
map1.put(123, 544);
map1.put(978, 99999999);
map.putAll(map1);
System.out.println(map);
//4- remove(Object key) --> 根据key来删除数据,返回的是 key对应的value
Object value = map.remove(123);
System.out.println(value); // 根据key来删除数据,返回的是 key对应的value
System.out.println(map);
//5- clear(清除数据)
map.clear();
System.out.println("clear后的的长度 = " + map.size());
System.out.println("clear后集合的内容 = " + map);
}
@Test
public void test2() {
HashMap map = new HashMap();
map.put("AA", 123);
map.put("BB", 13);
map.put("ACC", 23);
//6查找 - get(Object key) //输入key,找到他的value
System.out.println(map.get("AA"));
//7- 检验是否存在--指定的这个key---.containsKey
boolean isExistKey = map.containsKey("AA"); //是否存在Key="AA"的这个东西吗
System.out.println("判断是否存在指定的这个key = " + isExistKey);
//8- 检验是否存在--指定的这个value----.containsValue
boolean isExistValue = map.containsValue(23); //是否存在Value=23 的这个东西吗
System.out.println("判断是否存在指定的这个value = " + isExistValue);
//9- isEmpty (看看这个集合,内容是否为空)
/*
map.clear();
System.out.println("看看这个集合,内容是否为空 = "+map.isEmpty());
*/
}
@Test
public void test3() {
HashMap map = new HashMap();
map.put("AA", 123);
map.put("BB", 13);
map.put("ACC", 23);
//10- 便利所有的key: keySet()
Set set = map.keySet(); //1- 先接收keySet的值
Iterator iterator = set.iterator(); //2- 用接收的keySet的值..iterator();
while ((iterator.hasNext())) { //3- while便利keySet的值..iterator();
System.out.println(" 便利所有的key = " + iterator.next());
}
System.out.println("--------------------");
//11- 便利所有的value
Collection values = map.values();
for (Object obj : values) {
System.out.println("便利所有的value = " + obj);
}
//12- 便利所有的key - value
//便利方式一、
Set entrySet = map.entrySet();
Iterator iterator1 = entrySet.iterator();
while (iterator1.hasNext()) {
Object obj = iterator1.next();
//entrySet集合中的元素都是entry
Map.Entry entry = (Map.Entry) obj;
System.out.println(entry.getKey() + " ----> " + entry.getValue());
}
//便利方式二、
Set setKey = map.keySet(); //1- 先接收keySet的值
Iterator iterator2 = setKey.iterator(); //2- 用接收的keySet的值..iterator();
while ((iterator2.hasNext())) { //3- while便利keySet的值..iterator();
Object key = iterator2.next();
Object value = map.get(key);
System.out.println(key + " ======> " + value);
}
}
}
TreeMap的理解
/*
向TreeMap中添加key- value,要求key必须去由同一个类创建的对象
因为要按照key进行排序:自然排序,定制排序
TreeSet,就用compareTo和comparator来对类进行比较的
*/
TreeMap的使用
public class About_TreeMap_Understand {
@Test //默认compareTo排序
public void test1() {
TreeMap map = new TreeMap();
User user1 = new User("tom", 12);
User user2 = new User("java", 121);
User user3 = new User("C++", 152);
User user4 = new User("C", 123);
map.put(user1, 10);
map.put(user2, 2);
map.put(user3, 90);
map.put(user4, 54);
Set entrySet = map.entrySet();
Iterator iterator1 = entrySet.iterator();
while (iterator1.hasNext()) {
Object obj = iterator1.next();
//entrySet集合中的元素都是entry
Map.Entry entry = (Map.Entry) obj;
System.out.println("这里面用的是" + entry.getKey() + " ----> " + entry.getValue());
}
}
@Test //new Comparator() --按照age排序
public void test2() {
TreeMap map = new TreeMap(new Comparator() {
@Override
public int compare(Object o1, Object o2) {
if (o1 instanceof User && o2 instanceof User) {
User u1 = (User) o1;
User u2 = (User) o2;
return Integer.compare(u1.getAge(), (u2.getAge()));
}
throw new RuntimeException("你输入的类型有误");
}
});
User user1 = new User("tom", 12);
User user2 = new User("java", 121);
User user3 = new User("C++", 152);
User user4 = new User("C", 123);
map.put(user1, 10);
map.put(user2, 2);
map.put(user3, 90);
map.put(user4, 54);
Set entrySet = map.entrySet();
Iterator iterator1 = entrySet.iterator();
while (iterator1.hasNext()) {
Object obj = iterator1.next();
//entrySet集合中的元素都是entry
Map.Entry entry = (Map.Entry) obj;
System.out.println(entry.getKey() + " ----> " + entry.getValue());
}
}
}
附加:对数据去重
使用Map对数据进行去重
public class Map_offRepetition {
public static void main(String[] args) {
Integer[] nums = new Integer[]{1, 1, 1, 1, 2, 1, 2, 3, 3, 3, 5, 5, 4, 5, 4};
Repetition repetition = new Repetition();
repetition.offRepetition(nums);
}
//这个封装了一个对数组去重的方法
static class Repetition {
public void offRepetition(Integer[] nums) {
List list = new ArrayList<>();
Map<Integer, Object> objectObjectMap = new HashMap<>();
for (Integer number : nums) {
objectObjectMap.put(number, true);
}
Set set = objectObjectMap.keySet();
Iterator iterator = set.iterator();
while ((iterator.hasNext())) {
list.add(iterator.next());
}
System.out.println(list);
}
}
}