当前位置: 首页 > news >正文

Java,集合框架,关于Map接口与Collections工具类

目录

Map接口

Map及其实现类的对比:

HashMap中元素的特点:

相关方法:

添加、修改操作:

删除操作:

元素查询的操作:

元视图操作的方法:

TreeMap的使用:

Properties类:

Collections工具类

常用方法:

排序操作

查找

复制、替换

添加

同步


Map接口

Map及其实现类的对比:

java.util.Map:存储一对一对的数据(key-value键值对,类似于数学上的函数)

实现类:HashMap(主要实现类)、LinkedHashMap(继承于HashMap)、TreeMap、Hashtable、Properties

HashMap:主要实现类。线程不安全的,效率高。可以添加null的key和value值。底层使用数组+单向链表+红黑树结构存储(jdk8)。

LinkedHashMap:是HashMap的子类。在数组+单向链表+红黑树结构的基础上,增加了双向链表,用于记录添加的元素的先后顺序。在遍历元素时,就可以按照添加的顺序显示。

TreeMap:底层使用红黑树结构存储。可以按照添加的key-value中的key元素的指定的属性的大小进行遍历。需要考虑使用自然排序和定制排序。

Hashtable:古老实现类。线程安全的,效率低。不可以添加null的key或value值。底层使用数组+单向链表结构存储(jdk8)

Properties:是Hashtable的子类。其key和value都是String类型的。常用来处理属性文件。

HashMap中元素的特点:

HashMap中的所有key之间是不可重复的、无序的。所有的key构成一个Set集合。key所在的类要重写hashCode( )和equals( )方法。

HashMap中的所有的value彼此之间是可重复的、无序的。所有的value构成一个Collection集合。value所在的类要重写equals方法。

HashMap中的一对key-value,就构成了一个entry。Map中的entry是不可重复的、无序的。所有的entry就构成了一个Set集合。

相关方法:

添加、修改操作:

object put(Object key,Object value):将指定key-value添加到(或修改)当前map对象中。

void putAll(Map m):将m中的所有key-value对存放到当前map中。

删除操作:

Object remove(Object key):移除指定key的key-value对,并返回value。

void clear( ):清空当前map中的所有数据。

元素查询的操作:

Object get(Object key):获取指定key对应的value。 

boolean containsKey(Object key):是否包含指定的key。 

boolean containsValue(Object value):是否包含指定的value。

int size( ):返回map中key-value对的个数。

boolean isEmpty( ):判断当前map是否为空。

boolean equals(Object obj):判断当前map和参数对象obj是否相等。

元视图操作的方法:

Set keySet( ):返回所有key构成的Set集合。

Collection values( ):返回所有value构成的Collection集合。

Set entrySet( ):返回所有key-value对构成的Set集合。

TreeMap的使用:

底层使用红黑树结构存储。

可以按照添加的key-value中的key元素的指定的属性的大小进行遍历。

需要考虑使用自然排序和定制排序。

要求添加进TreeMap集合中的key元素必须是同一个类型的。

定制排序的步骤与TreeSet中的一致:

User u1 = new User("李",19);
User u2 = new User("张",20);
User u3 = new User("刘",18);
User u4 = new User("宋",21);
Comparator cc = new Comparator()
{@Overridepublic int compare(Object o1, Object o2)//按年龄从大到小{if(o1 == o2){return 0;}if(!(o1 instanceof User && o2 instanceof User)){throw new RuntimeException("类型错误");}User uu1 = (User) o1;User uu2 = (User) o2;if(uu1.getAge() < uu2.getAge()){return 1;}else if(uu1.getAge() == uu2.getAge()){return 0;}else{return -1;}}
};
TreeMap tt = new TreeMap(cc);
tt.put(u1,111);
tt.put(u2,222);
tt.put(u3,333);
tt.put(u4,444);Iterator ii = tt.entrySet().iterator();
while(ii.hasNext())
{System.out.println(ii.next());
}

Properties类:

是Hashtable的子类。其key和value都是String类型的。常用来处理属性文件。

具体使用如下:

File ff = new File("info.properties");
System.out.println(ff.getAbsolutePath());Properties pp = new Properties();
try
{FileInputStream fff = new FileInputStream(ff);pp.load(fff);String name = pp.getProperty("name");String password = pp.getProperty("password");System.out.println(name + "\t" + password);
} catch (FileNotFoundException e)
{throw new RuntimeException("NO");
} catch (IOException e)
{throw new RuntimeException("NO");
}

将key值name和password存储在文件“info.properties”中,要对整个代码中的name和password进行修改时,只需要对文件中的二者进行修改即可。

文件“info.properties”:

文件中等于号两边不能出现空格,否则会将空格也算作key值或value值的字符内容。

Collections工具类

Collections是操作List、Set、Map等集合的工具类。

常用方法:

排序操作

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):根据Comparator指定的顺序,返回给定集合中的最小元素。

int binarySearch(List list,T key)在List集合中查找某个元素的下标,但是List的元素必须是T或T的子类对象,而且必须是可比较大小的,即支持自然排序的。而且集合也事先必须是有序的,否则结果不确定。

int binarySearch(List list,T key,Comparator c)在List集合中查找某个元素的下标,但是List的元素必须是T或T的子类对象,而且集合也事先必须是按照c比较器规则进行排序过的,否则结果不确定。

int frequency(Collection c, Object o):返回指定集合中指定元素的出现次数。

复制、替换

 void copy(List dest,List src):将src中的内容复制到dest中

 boolean replaceAll(List list, Object oldVal, Object newVal):使用新值替换 List 对象的所有旧值

提供了多个unmodifiableXxx( )方法,该方法返回指定Xxx的不可修改的视图。

添加

boolean addAll(Collection c,T..elements)将所有指定元素添加到指定collection中。

同步

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

http://www.lryc.cn/news/236714.html

相关文章:

  • 【实用技巧】更改ArduinoIDE默认库文件位置,解放系统盘,将Arduino15中的库文件移动到其他磁盘
  • 二、什么是寄存器
  • 邀请报名|11月24日阿里云原生 Serverless 技术实践营 深圳站
  • 学习UI第一天
  • 1688商品详情原数据(2023年11月最新版)
  • CleanMyMac X2024免费测试版好不好用?值不值得下载
  • Linux操作文件的底层系统调用
  • steam搬砖项目2023年现状分析,到底还能不能做?
  • 【论文阅读】基于隐蔽带宽的汽车控制网络鲁棒认证(二)
  • string类的常用方法
  • Java面向对象(高级)-- 单例(Singleton)设计模式
  • 【Kingbase FlySync】命令模式:安装部署同步软件,实现Oracle到KES实现同步
  • 2311d导入c的语义不同
  • OpenHarmony Meetup北京站招募令
  • C语言——冒泡排序
  • 08.智慧商城——购物车布局、全选反选、功能实现
  • 金属压块液压打包机比例阀放大器
  • python 自动化福音,30行代码手撸ddt模块
  • 基于GATK流程化进行SNP calling
  • 【Java SE】如何解读Java的继承和多态的特性?
  • uniapp 手动调用form表单submit事件
  • 11月20日星期一今日早报简报微语报早读
  • Unity中 Start和Awake的区别
  • 进度条、git常见指令以及gdb的常用指令
  • ubuntu20编译安装pkg-config
  • 奇富科技发布鸿蒙元服务1.0版本,打造鸿蒙生态金融科技全新体验
  • 【Git学习一】初始化仓库git init的使用和提交git add与git commit的使用
  • Redux-状态管理组件
  • 【bigo前端】egret中的对象池浅谈
  • 用公式告诉你 现货黄金投资者要不要换策略?