集合

可以使用集合的三个具体类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有什么区别?

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<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 集合和映射表的更多相关文章

  1. java中的映射表HashMap、TreeMap

    集(set)是集合(collection),集合不是集. HashMap是散列映射.TreeMap对键进行排序了. map的三个视图:键集.值集合.键/值集. Set<K> keySet( ...

  2. java基本类型映射表

  3. Java集合(1)一 集合框架

    目录 Java集合(1)一 集合框架 Java集合(2)一 ArrayList 与 LinkList Java集合(3)一 红黑树.TreeMap与TreeSet(上) java集合(4)一 红黑树. ...

  4. 浅谈JAVA集合框架

    浅谈JAVA集合框架 Java提供了数种持有对象的方式,包括语言内置的Array,还有就是utilities中提供的容器类(container classes),又称群集类(collection cl ...

  5. Java集合框架中Map接口的使用

    在我们常用的Java集合框架接口中,除了前面说过的Collection接口以及他的根接口List接口和Set接口的使用,Map接口也是一个经常使用的接口,和Collection接口不同,Map接口并不 ...

  6. Java 集合系列 15 Map总结

    java 集合系列目录: Java 集合系列 01 总体框架 Java 集合系列 02 Collection架构 Java 集合系列 03 ArrayList详细介绍(源码解析)和使用示例 Java ...

  7. 浅谈JAVA集合框架(转载)_常用的Vector和HashMap

    原作者滴着:http://www.cnblogs.com/eflylab/archive/2007/01/20/625237.html Java提供了数种持有对象的方式,包括语言内置的Array,还有 ...

  8. Thinking in Java——集合(Collection)

    一.ArrayList的使用(略) 二.容器的基本概念 (一).Collection是集合类的基本接口 主要方法: public interface Collection<E>{ bool ...

  9. Java 集合 持有引用 & WeakHashMap

    Java 集合 持有引用 & WeakHashMap @author ixenos 摘要:强引用.弱引用.WeakHashMap动态回收步骤 Reference引用对象 可获得的(reacha ...

随机推荐

  1. 【Sublime Text3】Package Control:Install Package不能使用解决方法

    官网地址 https://packagecontrol.io/installation 报错内容     解决方法 https://packagecontrol.io/docs/troubleshoo ...

  2. hibernate 中文文档

    转载:http://blog.csdn.net/kevon_sun/article/details/42850387 Hibernate Annotations 参考文档 3.2.0 CR1 目录 前 ...

  3. codeforces 777C

    C.Alyona and Spreadsheet During the lesson small girl Alyona works with one famous spreadsheet compu ...

  4. 洛谷 P3155 [CQOI2009]叶子的染色 解题报告

    P3155 [CQOI2009]叶子的染色 题目描述 给一棵m个结点的无根树,你可以选择一个度数大于1的结点作为根,然后给一些结点(根.内部结点和叶子均可)着以黑色或白色.你的着色方案应该保证根结点到 ...

  5. 部署kubernetes1.8.3高可用集群

    Kubernetes作为容器应用的管理平台,通过对pod的运行状态进行监控,并且根据主机或容器失效的状态将新的pod调度到其他node上,实现了应用层的高可用. 针对kubernetes集群,高可用性 ...

  6. centos6.5安装VNC、远程及启动关闭

    标签: centos vnc 远程桌面 安装 详解 0.说明 安装服务的过程当中,最好是在联网环境下操作.由于涉及到远程连接的问题,系统的防火墙需要关闭,或者是做好相应的过滤策略.参考了网上很多大牛的 ...

  7. Linux下Vim编辑器访问系统剪切板

    默认情况下VIM使用的是内置的寄存器,而不是X Window的剪切板 启用系统剪切板支持 可以使用vim --version | grep clipboard查看,若clipboard前显示-标记,而 ...

  8. [Cqoi2014]数三角形——组合数

    Description: 给定一个nxm的网格,请计算三点都在格点上的三角形共有多少个.下图为4x4的网格上的一个三角形. 注意三角形的三点不能共线. Hint: 1<=m,n<=1000 ...

  9. 洛谷P4413 R2

    好,这是一道巨水题...... #include <cstdio> using namespace std; typedef long long LL; int main() { LL a ...

  10. idea svn performing vcs refresh 很长时间

    go to settings - version control - background set changelists to cache initially to minimal value (1 ...