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有什么区别?

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());
        }
    }
}

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

原文地址:https://www.cnblogs.com/zquan/p/9372110.html

时间: 2024-10-13 15:48:40

Java 集合和映射表的相关文章

Java集合(1)一 集合框架

目录 Java集合(1)一 集合框架 Java集合(2)一 ArrayList 与 LinkList Java集合(3)一 红黑树.TreeMap与TreeSet(上) java集合(4)一 红黑树.TreeMap与TreeSet(下) Java集合(5)一 HashMap与HashSet 引言 集合在任何语言中都是比较重要的基础知识,不同的集合在实现上采用了各种不同的数据结构,导致了各个集合的性能以及使用方式上存在很大差异,深入了解集合框架的整体结构以及各个集合类的实现原理,并灵活使用各个集合

学习笔记-java 集合

背景: 看的是<java核心技术 第8版>,覆盖jdk1.6.主要是对集合全局和细节进行全面掌握,较深入的理解集合.本人对java比较熟悉,但是对于细节的理解不深,知识点还不全,这是知识的查缺不漏. 一.集合接口 接口和实现分离 当程序中使用集合时,一旦构建了集合就不需要知道究竟使用的哪种实现,因此,只有构建集合对象时,使用具体的类才有意义.可以使用接口类型存放集合的引用. 2.  集合接口和迭代接口 java迭代器应该认为是位于两个元素中间,当调用next时,迭代器就越过下一个元素. Ite

Java集合知识点小结

Java提供了数种持有对象的方式,包括语言内置的Array,还有就是utilities中提供的容器类(container classes),又称群集类(collection classes).集合在java中非常重要,在讨论之前,先来看几个面试中的经典问题. 1 Collection 和 Collections的区别. 2 List, Set, Map是否继承自Collection接口. 3 ArrayList和Vector的区别. 4 HashMap和Hashtable的区别. 篇尾有答案,我

java集合(一)——数据结构详解

当我们要处理一串数据的时候,相比较c++和c中的数组和指针,在Java中我们更为常用的是ArrayList.HashMap等集合数据结构.c语言对指针的支持成就了他的深度,而Java中多种多样的包装类成就了他的广度.在java中,我们一般将List.Map.Set等数据结构通归为集合数据结构,这些类都存在于集合类库中. (一) 集合接口 1.集合的接口和实现分离 与其他的数据结构类库相似的,java的集合类库也采用了这种接口和实现分离的方法. 这种方法的好处是不言而喻的.当你要实例化一个队列时,

浅入深出之Java集合框架(下)

Java中的集合框架(下) 由于Java中的集合框架的内容比较多,在这里分为三个部分介绍Java的集合框架,内容是从浅到深,哈哈这篇其实也还是基础,惊不惊喜意不意外 ̄▽ ̄ 写文真的好累,懒得写了.. 温馨提醒:建议从(上)开始看哦~ 目 录 浅入深出之Java集合框架(上) 浅入深出之Java集合框架(中)   浅入深出之Java集合框架(下) 前 言 在<浅入深出之Java集合框架(中) >中介绍了Map接口的基本操作.使用的示例是在<浅入深出之Java集合框架(上)>中的模拟学

Java集合(一):Java集合概述

注:本文基于JDK 1.7 1 概述 Java提供了一个丰富的集合框架,这个集合框架包含了许多接口.虚拟类和实现类.这些接口和类提供了丰富的功能,能够满足基本的聚合需求.下图就是这个框架的整体结构图: 可以看见,这个框架非常大,大到吃惊的地步.这个图的左面部分是接口,右面部分是类,中间的线代表了右面的类实现了左面的哪些接口.比如,AbstractList类实现了List接口,那么继承自AbstractList类的子类都实现了这个接口.还有,如果一个类实现了一个接口,那么这个类也实现了这个接口的所

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

在我们常用的Java集合框架接口中,除了前面说过的Collection接口以及他的根接口List接口和Set接口的使用,Map接口也是一个经常使用的接口,和Collection接口不同,Map接口并不是线性的存放对象的引用,Map接口提供了一种映射关系,所有的元素都是以键值对(Entry类型对象实例)的方式存储的,所以能够根据key快速查找value,key是映射关系的索引,value是key所指向的对象,注意,这里的value不是一个数值,而是一个对象的引用,Java集合框架的元素均是指对象!

附录B 知识单元与章节映射表

<编程导论(Java)>附录B 知识单元与章节映射表 按照美国计算机科学专业本科的教学计划--<计算课程2001> ,大学级别的计算机科学知识可以归纳成14个知识领域: 1.        离散结构 Discrete Structures (DS) 2.        编程基础Programming Fundamentals (PF) 3.        算法与复杂性Algorithms and Complexity (AL) 4.        体系结构与组织Architectu

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

原作者滴着:http://www.cnblogs.com/eflylab/archive/2007/01/20/625237.html Java提供了数种持有对象的方式,包括语言内置的Array,还有就是utilities中提供的容器类(container classes),又称群集类(collection classes).集合在java中非常重要,在讨论之前,先来看几个面试中的经典问题. 1 Collection 和 Collections的区别. 2 List, Set, Map是否继承自