博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java 集合和映射表
阅读量:4592 次
发布时间:2019-06-09

本文共 3279 字,大约阅读时间需要 10 分钟。

集合

可以使用集合的三个具体类HashSet、LinkedHashSet、TreeSet来创建集合

 

HashSet类

负载系数

当元素个数超过了容量与负载系数的乘积,容量就会自动翻倍

 

HashSet类可以用来存储互不相等的任何元素。考虑到效率的因素,添加到散列集中的对象必须以一种正确分散散列码的方式来实现hashCode方法。

如果两个对象相等,那么这两个对象的散列码必须一样。两个不相等的对象可能有相同的散列码

继承Collection接口,所以Collection中的所有方法,都可以用

例子:

 

 

 

 

LinkedHashSet类

LinkedHashSet用一个链表实现来扩展HashSet类,他支持对集合内的元素排序

HashSet中的元素是没有被排序的,而LinkedHashSet中的元素可以按照他们插入集合的顺序提取。

例子:

 

 LinkedHashSet保持了元素插入时的顺序。

 

 

TreeSet类

例子:

public class TextTreeSet {    public static void main(String [] args) {                Set
set = new HashSet
(); set.add("London"); set.add("Paris"); set.add("New York"); set.add("Zon"); TreeSet
treeSet = new TreeSet
(set); System.out.println("Sorted tree set : " + treeSet); System.out.println("first : " + treeSet.first()); System.out.println("last : " + treeSet.last()); System.out.println(treeSet.headSet("New York")); //输出New York 之前的数据 System.out.println(treeSet.tailSet("New York")); //输出 New York 之后的数据 System.out.println("小于: " + treeSet.lower("Paris")); //返回一个小于给定的元素 System.out.println("大于: " + treeSet.higher("New York")); //返回一个大于给定的元素 System.out.println("小于或等于: " + treeSet.floor("P")); //返回一个小于或等于给定的元素 System.out.println("大于或等于:" + treeSet.ceiling("P")); //返回一个大于或等于给定的元素 System.out.println("pollFirst: " + treeSet.pollFirst()); System.out.println("pollLast: " + treeSet.pollLast()); System.out.println("New tree set: " + treeSet); }}

 

 

例子:

 

 

HashSet,LinkedHashSet和TreeSet有什么区别?

HashSet使用哈希表实现的,元素是无序的。添加、删除操作时间复杂度都是O(1)。TreeSet内部结构是一个树结构(红黑树),元素是有序的,添加、删除操作时间复杂度为O(log(n)),并且提供了first(), last(), headSet(), tailSet()等方法来处理有序集合。LinkedHashSet是介于HashSet 和 TreeSet之间,内部是一个双向链表结构,所以它的插入是有序的,时间复杂度是O(1)。
 
 
映射表

 

 

 

更新方法包括clear、put、putAll和remove,方法clear()从映射表中删除所有的条目。

方法put(K,V)为映射表中的指定的键和值添加条目,如果这个映射表原来就包含键的一个条目,这原来的值将被新的值所替代,并且返回与这个键相关联的原来的值

查询方法包括containsKey、containsValue、isEmpty和size。

 

 

 

 

 

 LinkedHashMap类是用链表来实现来扩展HashMap类,他支持映射表中的条目的排序。HashMap没有顺序,而LinkedHashMap,元素可以按照插入的顺序来顺序排序,也可以按他们被最后一次访问时的顺序从最早到最晚排序,

TreeMap类在遍历排好顺序的键时是很高效的。键可以使用Comparable接口或Comparator接口来排序

例子:

 LinkedHashMap如果使用了按访问顺序排序,那么被访问的,会放在映射表的末尾

三种映射表的使用情况

 

统计单词出现次数例子:

public class CountOccurentOfWords {        public static void main(String [] args) {                String text = "Good morning. have a good class. Have a good visits. Have fun!.";        Map
map = new TreeMap<>(); String [] words = text.split("[ \n\t\r.,;:?!(){}]"); for(int i=0; i
0) { if(!map.containsKey(key)) { map.put(key, 1); }else { int value = map.get(key); value++; map.put(key, value); } } } Set
> wordSet = map.entrySet(); //调用entrySet()方法 可以返回一个Set集合 for(Map.Entry
s: wordSet) { System.out.println(s.getKey() + " " + s.getValue()); } }}

 

单元素与不可变的合集和映射表

 

转载于:https://www.cnblogs.com/zquan/p/9372110.html

你可能感兴趣的文章
Shuffle过程详解
查看>>
Amazon DynamoDB
查看>>
云数据库与其他数据库的关系
查看>>
Amazon AWS
查看>>
Amazon AWS EC2存储
查看>>
Amazon S3和EBS的区别
查看>>
AWS云管理平台
查看>>
NoSQL SimpleDB
查看>>
连接RDS数据库
查看>>
操作RDS数据库
查看>>
分布式并行编程
查看>>
swoolefy PHP的异步、并行、高性能网络通信引擎内置了Http/WebSocket服务器端/客户端...
查看>>
Python学习笔记
查看>>
unshift()与shift()
查看>>
使用 NPOI 、aspose实现execl模板公式计算
查看>>
行为型模式:中介者模式
查看>>
How to Notify Command to evaluate in mvvmlight
查看>>
STL容器内数据删除
查看>>
33. Search in Rotated Sorted Array
查看>>
461. Hamming Distance
查看>>