java基础第十五天 集合

1、TreeSet

TreeSet 是 SortedSet 接口的实现类.

特点:
元素唯一
排序

两种排序方法:
自然排序 比较的类需要实现接口compareable,并重写compareTo方法
比较器排序,也叫定制排序 自定义比较器实现comparator,并重写comapre方法

升序:需要在compareTo和comapre方法里面,使用前者的属性和后者的属性相比较:
倒叙:需要在compareTo和comapre方法里面,使用后者的属性和前者的属性相比较:

注意:

1、如果试图把一个对象添加到 TreeSet 时,则该对象的类必须实现 Comparable 接口。
2、TreeSet是用compareTo()来判断重复元素的,而非equals()

2、Map

特点

 1、map存储的数据有两列,叫键值对
 2、Map 中的 key 用Set来存放,不允许重复,value使用Collection存放
 3、key 和 value 之间存在单向一对一关系

常用实现类:

 HashMap
 LinkedHashMap(了解)
 TreeMap
 HashTable(了解)
    Properties

常用方法

添加、删除操作:

Object put(Object key,Object value)  将指定的值与此映射中的指定键关联(可选操作)。
Object remove(Object key) 如果存在一个键的映射关系,则将其从此映射中移除
void putAll(Map t) 从指定映射中将所有映射关系复制到此映射中
void clear()  从此映射中移除所有映射关系

元素查询的操作:

Object get(Object key)  返回指定键所映射的值;如果此映射不包含该键的映射关系,则返回 null。
boolean containsKey(Object key)  如果此映射包含指定键的映射关系,则返回 true。
boolean containsValue(Object value)  如果此映射将一个或多个键映射到指定值,则返回 true。
int size()  如果此映射将一个或多个键映射到指定值,则返回 true。
boolean isEmpty()  如果此映射未包含键-值映射关系,则返回 true。
boolean equals(Object obj) 比较指定的对象与此映射是否相等。

最常用get和size方法,其他都较少使用

元视图操作的方法:

Set keySet() 返回此映射中包含的映射关系的 Set 视图
Collection values()
Set entrySet()

keyset和entryset是需要掌握的

//必须掌握map的遍历方法
Map<String, String> map = new HashMap<String,String>();
map.put("郭靖", "黄蓉");
map.put("杨康", "穆念慈");
map.put("杨过", "小龙女");

//通过keyset可以取出所有的key到Set对象
Set<String> set = map.keySet();
for (Object object : set) {
    System.out.println(object+" "+ map.get(object));
}

System.out.println();
//通过entrySet来获取map的key和value
Set<Map.Entry<String,String>> set1 = map.entrySet();
for (Entry<String, String> entry : set1) {
    String key = entry.getKey();
    String value = entry.getValue();
    System.out.println(key+" "+ value);     
}

System.out.println();
//把所有的value返回到一个Collection里
Collection<String> c1 = map.values();
for (String string : c1) {
    System.out.println(string);
}   

2.1 HashMap

HashMap是 Map 接口使用频率最高的实现类
允许使用null键和null值
HashMap 判断两个 key 相等的标准:equals() 和hashCode

2.2 LinkedHashMap(了解)

特点:
有序(有链表保证)

2.3 TreeMap

TreeMap:可以保证所有的 Key-Value 对处于有序状态。

自然排序: 排序的类实现Comparable,然后需要实现compateTo方法
定制排序: 自定义比较器类实现个 Comparator


判断key相等的标准:两个key通过compareTo()方法或者compare()方法返回0

注意:

若使用自定义类作为TreeMap的key,所属类需要重写equals()和hashCode()方法,且equals()方法返回true时,compareTo()方法应返回0。

2.4 HashTable(了解)

1、Hashtable线程安全。
2、Hashtable 不允许使用 null 
 3、无序
 4、判断key是否相等与hashMap一致  

2.5 Properties

Properties: 是 Hashtable 的子类,该对象用于处理属性文件

常用方法:

setProperty(String key,String value)
String getProperty(String key)

//读取配置文件
Properties properties = new Properties();
//把config.properties文件加载到内存中的pros对象中
properties.load(new FileInputStream("G:\\workspace\\javabase\\src\\day15\\map\\config.properties"));
String driverClassName = properties.getProperty("driverClassName");
String userName = properties.getProperty("userName");
String password = properties.getProperty("password");
String url = properties.getProperty("url");


System.out.println(driverClassName);
System.out.println(userName);
System.out.println(password);
System.out.println(url);

3、Collections

Collections是集合的工具类,类似数组的工具类Arrays

3.1 sort(list, Comparator)

//通过sort(List,Comparator)对map的value进行排序
Set<Map.Entry<String, Integer>> set = map.entrySet();
List<Map.Entry<String, Integer>> list  = new ArrayList<Map.Entry<String, Integer>>(set);

Collections.sort(list, new Comparator<Map.Entry<String, Integer>>(){

    @Override
    public int compare(Entry<String, Integer> o1,
            Entry<String, Integer> o2) {

        return o1.getValue()-o2.getValue();
    }


});

3.2 同步控制

Collections 类中提供了多个 synchronizedXxx() 方法,该方法可使将指定集合包装成线程同步的集合,从而可以解决多线程并发访问集合时的线程安全问题

4、集合嵌套

    //经典案例之list包含map,map再包含list

    List<Map<String,List<Student>>> list = new ArrayList<Map<String,List<Student>>>();

    //现在有两个Map,分别是javaEEMap和h5Map
    //javaee班有个班级
    //h5有1个班级
    Map<String, List<Student>> javaEEMap = new HashMap<String, List<Student>>();
    List<Student> l1 = new ArrayList<Student>();
    l1.add(new Student("张三1",21));
    l1.add(new Student("张三2",22));
    l1.add(new Student("张三3",23));
    l1.add(new Student("张三4",24));
    javaEEMap.put("java01班", l1);


    List<Student> l2 = new ArrayList<Student>();
    l2.add(new Student("李四1",21));
    l2.add(new Student("李四2",22));
    l2.add(new Student("李四3",23));
    l2.add(new Student("李四4",24));
    javaEEMap.put("java02班", l2);

    Map<String, List<Student>> h5Map  = new HashMap<String, List<Student>>();
    List<Student> l3 = new ArrayList<Student>();
    l3.add(new Student("王五1",21));
    l3.add(new Student("王五1",21));
    l3.add(new Student("王五1",21));
    l3.add(new Student("王五1",21));
    h5Map.put("h5班", l3);

    //把map放到总的List里面
    list.add(javaEEMap);
    list.add(h5Map);

    for (Map<String,List<Student>> map : list) {
        for (String key : map.keySet()) {
            //得到map的value,是个list
            List<Student> values = map.get(key);
            for (Student student : values) {
                System.out.println(key +"+"+ student);
            }
        }
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值