黑马程序员——java基础学习笔记——第九天

来源:互联网 发布:编程 儿童 编辑:程序博客网 时间:2024/05/20 19:18

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

Map集合

一概述:

Map与Collection在集合框架中属并列存在,Map存储的是键值对,Map存储元素使用put方法,Collection使用add方法,Map集合没有直接取出元素的方法,而是先转成Set集合,在通过迭代获取元素Map集合中键要保证唯一性。

二Map常用方法:

添加、删除操作:

Object put(Object key,Object value)

Object remove(Object key)

void putAll(Mapt)

void clear()


元视图操作的方法:

Set keySet()

Collection values()

Set entrySet()


元素查询的操作:

Object get(Object key)

boolean containsKey(Objectkey)

boolean containsValue(Objectvalue)

int size()

boolean isEmpty()

boolean equals(Object obj)

import java.util.*;class MapDemo {public static void main(String[] args) {Map<String,String> map=new HashMap<String,String>();map.put("01","zhangsan1");map.put("02","zhangsan1");map.put("03","zhangsan1");System.out.println("containsKey:"+map.containsKey("02"));System.out.println("remove:"+map.remove("02"));System.out.println(map);}}


三HashMap:

允许使用null键和null值,与HashSet一样,不保证映射的顺序。

HashMap 判断两个 key 相等的标准是:两个 key 通过 equals()方法返回 true,hashCode 值也相等。

HashMap 判断两个 value相等的标准是:两个 value通过 equals()方法返回 true。


import java.util.*;class Student implements Comparable<Student>{private String name;private int age;Student(String name,int age){this.name=name;this.age=age;}public int compareTo(Student s){int num=new Integer(this.age).compareTo(new Integer(s.age));if(num==0)return this.name.compareTo(s.name);return num;}public int hashCode(){return name.hashCode()+age*34;}public boolean equals(Object obj){if(!(obj instanceof Student))throw new ClassCastException("类型不匹配");Student s=(Student)obj;return this.name.equals(s.name)&&this.age==s.age;}public String getName(){return name;}public int getAge(){return age;}public String toString(){return name+"::"+age;}}class MapTest {public static void main(String[] args) {HashMap<Student,String> hm=new HashMap<Student,String>();hm.put(new Student("lisi1",21),"beijing");hm.put(new Student("lisi2",22),"shanghai");hm.put(new Student("lisi3",23),"nanjing");hm.put(new Student("lisi4",24),"wuhan");/*第一种取出方式:keySetSet<Student> keySet=hm.keySet();Iterator<Student> it=keySet.iterator();while(it.hasNext()){Student stu=it.next();String addr=hm.get(stu);System.out.println(stu+"..."+addr);}*///第二种取出方式entrySetSet<Map.Entry<Student,String>> entrySet=hm.entrySet();Iterator<Map.Entry<Student,String>> iter=entrySet.iterator();while(iter.hasNext()){Map.Entry<Student,String> me =iter.next();Student stu=me.getKey();String addr=me.getValue();System.out.println(stu+"......."+addr);}}}
四TreeMap:

TreeMap存储 Key-Value对时,需要根据 key-value对进行排序。TreeMap 可以保证所有的Key-Value对处于有序状态。
TreeMap 的 Key 的排序:
自然排序:TreeMap 的所有的 Key 必须实现 Comparable接口,而且所有的Key应该是同一个类的对象,否则将会抛出ClasssCastException

定制排序:创建 TreeMap 时,传入一个Comparator对象,该对象负责对TreeMap 中的所有 key 进行排序。此时不需要Map的 Key 实现 Comparable接口

TreeMap判断两个key相等的标准:两个key通过compareTo()方法或者compare()方法返回0。
若使用自定义类作为TreeMap的key,所属类需要重写equals()和hashCode()方法,且equals()方法返回true时,compareTo()方法应返回0。

五操作集合的工具类:

Collections 是一个操作Set、List 和 Map 等集合的工具类
Collections 中提供了一系列静态的方法对集合元素进行排序、查询和修改等操作,还提供了对集合对象设置不可变、对集合对象实现同步控制等方法
排序操作:(均为static方法)

reverse(List):反转 List 中元素的顺序

shuffle(List):对 List集合元素进行随机排序

sort(List):根据元素的自然顺序对指定List集合元素按升序排序

sort(List,Comparator):根据指定的Comparator产生的顺序对List集合元素进行排序

swap(List,int,int):将指定 list 集合中的 i 处元素和 j 处元素进行交换

查找、替换:
Object max(Collection):根据元素的自然顺序,返回给定集合中的最大元素
Object max(Collection,Comparator):根据 Comparator指定的顺序,返回给定集合中的最大元素
Object min(Collection)
Object min(Collection,Comparator)
int frequency(Collection,Object):返回指定集合中指定元素的出现次数
void copy(List dest,Listsrc):将src中的内容复制到dest中
boolean replaceAll(Listlist,ObjectoldVal,ObjectnewVal):使用新值替换List对象的所有旧值

同步控制:
Collections 类中提供了多个synchronizedXxx() 方法,该方法可使将指定集合包装成线程同步的集合,从而可以解决多线程并发访问集合时的线程安全问题。
package com.atguigu.java;import java.util.ArrayList;import java.util.Arrays;import java.util.Collections;import java.util.List;import org.junit.Test;/* * 操作Collection以及Map的工具类:Collections *  * 面试题:区分Collection与Collections *  */public class TestCollections {/* *  Object max(Collection):根据元素的自然顺序,返回给定集合中的最大元素Object max(Collection,Comparator):根据 Comparator 指定的顺序,返回给定集合中的最大元素Object min(Collection)Object min(Collection,Comparator)int frequency(Collection,Object):返回指定集合中指定元素的出现次数void copy(List dest,List src):将src中的内容复制到dest中boolean replaceAll(List list,Object oldVal,Object newVal):使用新值替换 List 对象的所有旧值 */@Testpublic void testCollections2(){List list = new ArrayList();list.add(123);list.add(456);list.add(12);list.add(78);list.add(456);Object obj = Collections.max(list);System.out.println(obj);int count = Collections.frequency(list, 4567);System.out.println(count);//实现List的复制//List list1 = new ArrayList();//错误的实现方式List list1 = Arrays.asList(new Object[list.size()]);Collections.copy(list1, list);System.out.println(list1);//通过如下的方法保证list的线程安全性。List list2 = Collections.synchronizedList(list);System.out.println(list2);}/* *  reverse(List):反转 List 中元素的顺序shuffle(List):对 List 集合元素进行随机排序sort(List):根据元素的自然顺序对指定 List 集合元素按升序排序sort(List,Comparator):根据指定的 Comparator 产生的顺序对 List 集合元素进行排序swap(List,int, int):将指定 list 集合中的 i 处元素和 j 处元素进行交换 */@Testpublic void testCollections1(){List list = new ArrayList();list.add(123);list.add(456);list.add(12);list.add(78);System.out.println(list);Collections.reverse(list);System.out.println(list);Collections.shuffle(list);System.out.println(list);Collections.sort(list);System.out.println(list);Collections.swap(list, 0, 2);System.out.println(list);}}








0 0
原创粉丝点击