Java(集合-Map、Properties、可变参数)

 

目录

一.Map集合

二.Properties类(属性映射)

三.可变参数

四.Collections中的静态方法:


一.Map集合

Map集合的特点
 * 1.Map集合 和 Collection集合 没有继承关系,所以不能直接用迭代器
 * 2.Collection集合 每一个元素都是单独存在
 *         Map集合的每一个元素都是成对存在的
 * 3.Collection<E>一个泛型
 *         Map<K,V>两个泛型, K代表键的类型,V代表值的类型
 *             K,V可以相同  也可以不同,必须都是引用类型
 * 4.在Map集合的元素中,键是唯一的,值是可以重复的        


常用的实现类:


 *         HashMap:无序
 *             底层哈希表结构,保证键的唯一性,需要重写键对应类的hashCode和equals方法

ps:HashTable与HashMap方法一样,但是前者是线程安全的,后者是线程不安全的。

 *         HashTable和ConcurrentHashMap :(根据并发级别得到数组大小size,默认16 )

 *               HashTable因为使用了synchronized 同步方法,在竞争激烈的情况下效率会非常低。

 *               ConcurrentHashMap使用了锁分段的技术,来处理了这个问题。


 *         LinkedHashMap:有序
 *             底层哈希表结构+链表,哈希表保证键的唯一,链表保证元素的有序
 *                     需要重写键对应类的hashCode和equals方法

ps:TreeMap类似于TreeSet,都使用了红黑树作为数据结构,保证了元素的有序性。

 

Map<K,V>集合常用的方法:
 * 增: V put(K key,V value);//向集合中添加键值对
ps:如果集合中已存在该键,覆盖整个键值对,并返回被覆盖的键值对的值           
 * 删: V remove(OBject key);//根据键 从map集合中删除 键值对,返回值表示被删除的键值对的值
 * 改: 隐藏到了put方法!!!
 * 查: V get(K key);//根据键 从map集合中找到唯一对应的值,未找到默认返回null

 

Map集合第一种遍历方法:以键找值
 * 1.先获取map集合的键的集合,这个集合是一个Set集合
 *         Set<K> keys = map集合.keySet();
 * 2.遍历keys集合    
 *         a.增强for循环 b.迭代器
 * 3.在遍历的过程中,从map集合获取键对应的值

 

map集合第二种遍历 :键值对遍历
 * 1.获取map集合中所有 entry对象
 *         Set<Map.Entry<K,V>> set = map集合.entrySet();
 * 2.遍历这个set集合,获取每一个Map.Entry类型的对象
 *         a.迭代器 b.增强for循环
 * 3.获取到 Map.Entry类型的对象之后
 *         K key = entry.getKey();
 *         V value = entry.getValue();

二.Properties类(属性映射)

1.Properties类到底是什么?
 *         属性集,
 *         class Propeties extends HashTable implements Map
 *         所以:Properties本质上 就是一个Map集合(实现了Map接口)       
2.Properties是一个持久的属性集
 *         所谓持久 就是 它具有自己写数据到文件的方法
3.Properties是没有泛型,泛型是固定,String 和 String
4.Properties类,具有Map接口的一切方法
 *         还有具有一些自己特有的方法:
 *         public String getProperty(String key)用指定的键在此属性列表中搜索属性的值,功能和Map中的get是一样
 *         public Object setProperty(String key, String value);添加键值对,功能和Map的put方法是一样
 *         public Set<String> stringPropertyNames()://和Map中的keySet方法是一样
5.Properties具有持久化到文件的功能
 *         store();//保存数据到文件,实际上不是保存到文件 而是写入到流中,由流写到文件

ps:data.store(new FileWriter("phones.properties"), "");
 *         load();//从文件中加载数据,实际上不是直接加载文件,而是加载流中的数据,而流的数据是从该文件中读取的

ps:data.load(new FileReader("phones.properties"));

6.遍历Properties对象
        Properties ps = new Properties();
             ............
        Set<String> propertyNames = ps.stringPropertyNames();  //获取property的键集合。
        for (String propertyName : propertyNames) {
            //根据属性名 propertyName获取属性值
            String propertyValue = ps.getProperty(propertyName);
            System.out.println(propertyName+"="+propertyValue);
        }

三.可变参数

 * 说的不是参数类型可变,而是参数的个数可以变化
 * 
 * 语法: JDK1.5 出现新特性
 *         public 返回值类型 方法名(数据类型... 参数名){}
 *         
 *     注意:
 *     1.可变参数只是参数的个数是任意个,参数的类型不能改变    
 *     2.一个方法中 只能有一个可变参数
 *     3.当一个方法中有多个参数,并且有一个是可变参数的时候,要求这个可变参数必须在最后
 *         
 *     可变参数的本质: 就是一个数组

四.Collections中的静态方法:

 * public static void shuffle(List list);//打乱顺序
 * public static void sort(List list);//把集合元素按照自然顺序(123,abc)排序

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值