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 ... 
随机推荐
- android 让真机显示 DeBug Log调试信息
			真机默认是不开启Log 开关的,这么来说我们如果使用真机来搞程序测试的话,需要做以下几个步骤: 下面以华为手机为例开启手机的log功能: 1.在拨号界面输入:*#*#2846579#*#* 进入测 ... 
- LOJ 2664. 「NOI2013」向量内积 解题报告
			#2664. 「NOI2013」向量内积 两个 \(d\) 维向量 \(A=[a_1, a_2 ,...,a_d]\) 与 \(B=[b_1 ,b_2 ,...,b_d]\) 的内积为其相对应维度的权 ... 
- luogu3646 巴厘岛的雕塑 (dp)
			我们一位一位地来做,每次判断这一位能否放0,而且要在满足前几位的情况下.用dp来判断 具体来说,设f[i][j]表示前i个划分成j个区间能否满足,那么我们会有转移trans[i][k+1],当区间[i ... 
- nowcoder172C 保护 (倍增lca+dfs序+主席树)
			https://www.nowcoder.com/acm/contest/172/C (sbw大佬太强啦 orz) 先把每一个路径(x,y)分成(x,lca),(y,lca)两个路径,然后就能发现,对 ... 
- Ubuntu安装Atom编辑器
			安装方法 执行以下命令 sudo add-apt-repository ppa:webupd8team/atom sudo apt-get update udo apt-get install ato ... 
- 洛谷P1315 观光公交
			SB贪心......暴露了我代码能力巨弱的本质. 题面 解:首先我们应该想到DP(但是我想到了贪心......) 然后分析题目本质,每个点有个限制,最早开走时间不得早于最晚上车时间. 然后我们就可以把 ... 
- mod(%)之规律(除数与被除数的正负分析)
			首先注意“-9 % 4”,根据运算符优先级,负号运算符优先级大于余数(取模),所以执行的是“(-9) % 4”. 其次 % = mod ,只是在不同地方表示方法不同而已. 被除数无论是正数和负数结果都 ... 
- (大数 求余) Large Division   Light OJ 1214
			Large Division Given two integers, a and b, you should check whether a is divisible by b or not. We ... 
- C#控件及常用设计整理
			1.窗体 1.常用属性 (1)Name属性:用来获取或设置窗体的名称,在应用程序中可通过Name属性来引用窗体. (2) WindowState属性: 用来获取或设置窗体的窗口状态. 取值有三 ... 
- pymysql 解决 sql 注入问题
			1. SQL 注入 SQL 注入是非常常见的一种网络攻击方式,主要是通过参数来让 mysql 执行 sql 语句时进行预期之外的操作. 即:因为传入的参数改变SQL的语义,变成了其他命令,从而操作了数 ... 
