Java 集合和映射表

集合
可以使用集合的三个具体类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<String> set = new HashSet<String>();
set.add("London");
set.add("Paris");
set.add("New York");
set.add("Zon");
TreeSet<String> treeSet = new TreeSet<String>(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有什么区别?

更新方法包括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<String, Integer> map = new TreeMap<>();
String [] words = text.split("[ \n\t\r.,;:?!(){}]");
for(int i=0; i<words.length; i++) {
String key = words[i].toLowerCase();
if(key.length() > 0) {
if(!map.containsKey(key)) {
map.put(key, 1);
}else {
int value = map.get(key);
value++;
map.put(key, value);
}
}
}
Set<Map.Entry<String, Integer>> wordSet = map.entrySet(); //调用entrySet()方法 可以返回一个Set集合
for(Map.Entry<String, Integer> s: wordSet) {
System.out.println(s.getKey() + " " + s.getValue());
}
}
}

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


Java 集合和映射表的更多相关文章
- java中的映射表HashMap、TreeMap
集(set)是集合(collection),集合不是集. HashMap是散列映射.TreeMap对键进行排序了. map的三个视图:键集.值集合.键/值集. Set<K> keySet( ...
- java基本类型映射表
- Java集合(1)一 集合框架
目录 Java集合(1)一 集合框架 Java集合(2)一 ArrayList 与 LinkList Java集合(3)一 红黑树.TreeMap与TreeSet(上) java集合(4)一 红黑树. ...
- 浅谈JAVA集合框架
浅谈JAVA集合框架 Java提供了数种持有对象的方式,包括语言内置的Array,还有就是utilities中提供的容器类(container classes),又称群集类(collection cl ...
- Java集合框架中Map接口的使用
在我们常用的Java集合框架接口中,除了前面说过的Collection接口以及他的根接口List接口和Set接口的使用,Map接口也是一个经常使用的接口,和Collection接口不同,Map接口并不 ...
- Java 集合系列 15 Map总结
java 集合系列目录: Java 集合系列 01 总体框架 Java 集合系列 02 Collection架构 Java 集合系列 03 ArrayList详细介绍(源码解析)和使用示例 Java ...
- 浅谈JAVA集合框架(转载)_常用的Vector和HashMap
原作者滴着:http://www.cnblogs.com/eflylab/archive/2007/01/20/625237.html Java提供了数种持有对象的方式,包括语言内置的Array,还有 ...
- Thinking in Java——集合(Collection)
一.ArrayList的使用(略) 二.容器的基本概念 (一).Collection是集合类的基本接口 主要方法: public interface Collection<E>{ bool ...
- Java 集合 持有引用 & WeakHashMap
Java 集合 持有引用 & WeakHashMap @author ixenos 摘要:强引用.弱引用.WeakHashMap动态回收步骤 Reference引用对象 可获得的(reacha ...
随机推荐
- ACdream1187-Rational Number Tree-模拟/找规律
找到规律模拟就可以了,用DFS模拟很简洁,用循环模拟比较直观(大概吧) 注意输入输出用%llu,1ULL<<64=0!被这几个小问题卡了好久 #include <cstdio> ...
- Chrome 屏蔽广告
转载: http://blog.csdn.net/yenange/article/details/76145216 1. 上网站: http://www.adtchrome.com/ Chorme下载 ...
- js md5 中文
最近手机端通过js对请求数据加密,发现针对中文加密的结果和asp.net的webapi加密结果不一致 网上搜索了一下,发现以下js可用 function md5(string) { var x = A ...
- [ctsc2018] 混合果汁 【可持久化线段树】【二分答案】
题目分析 首先考虑到最小值最大,二分答案.假设答案为k,显然这满足单调性.如果某个k使得这个情况下选不出.那么比k大的一定也选不出,所以二分答案. 接着我们可以贪心,当我们确认了k以后,一定会优先选费 ...
- Aladdin and the Flying Carpet LightOJ - 1341 (素数打表 + 算术基本定理)
题意: 就是求a的因数中大于b的有几对 解析: 先把素数打表 运用算术基本定理 求出a的所有因数的个数 然后减去小于b的因数的个数 代码如下: #include <iostream> #i ...
- Educational Codeforces Round 26 B,C
B. Flag of Berland 链接:http://codeforces.com/contest/837/problem/B 思路:题目要求判断三个字母是否是条纹型的,而且宽和高相同,那么先求出 ...
- HSQL可视化工具
本地使用HSQL数据库进行开发,多是集成在开发工具的内部,比如studio,往往看不到HSQL数据库,那么如何查看HSQL数据库呢? 可以使用hsql自带的可视化工具,运行hsqldb-*.jar 包 ...
- 【ZOJ2277】The Gate to Freedom
BUPT2017 wintertraining(16) #4 E ZOJ - 2277 题意 输出\(n^n\)的首位的数字. 题解 用科学计数法表示\(n^n=k\cdot 10^b\),那么\(n ...
- .htaccess 配置
常规wordpress配置 <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index\.php$ ...
- 洛谷P4072 [SDOI2016]征途(带权二分,斜率优化)
洛谷题目传送门 一开始肯定要把题目要求的式子给写出来 我们知道方差的公式\(s^2=\frac{\sum\limits_{i=1}^{m}(x_i-\overline x)^2}{m}\) 题目要乘\ ...