类集框架解析

2017-08-20  16:30:32

  常用集合的总结:

List:有序、可重复

Set:无序、不可重复

Map:将键映射到值的对象,一个映射不能包含重复的键,每个键最多只能映射到一个值

 一、List(以ArrayList为例)

1)ArrayList.remove(int)按照下标删除,不会自动装箱

    List list = new ArrayList();
        list.add(1);
        list.add(2);
        list.add(2);
        list.add(2);
        list.add(3);
        list.add(4);
        list.add(5);

        list.remove(new Integer(5));//删除值为5的键值对
                list.remove(1);//删除下标为1的键值对

2)迭代器遍历的同时,添加元素,并发修改异常,通过ListIterator解决

public static void print(List list){
        ListIterator iter = list.listIterator();
        while(iter.hasNext()){
            Student s = (Student)iter.next();
            if(s.getName().equals("Jack"))
                iter.add(new Student("Marry",20));
            System.out.println(iter.next());
        }
    }

3)遍历集合删除元素,使用Iterater.remove()操作(否则会报并发修改异常)

        Iterator iter = list.iterator();
        while(iter.hasNext()){
            Integer i = (Integer)iter.next();
            if(i == 5)
                iter.remove();
            System.out.println(iter.next());
        }

4)集合数组互转用Arrays.asList()/ArrayList.toArray()  但要注意:数组转化成集合Arrays.asList() 转化后的集合为固定长度,不可改变

5)List的三个子类的特点:

ArrayList:底层数据结构是数组,查询快,增删慢。线程不安全,效率高。

LinkedList:底层数据结构是链表,查询慢,增删快。线程不安全,效率高。

Vector:底层数据结构是数组,查询快,增删慢。线程安全,效率低。

二、Set

a)我们使用Set集合都是需要去掉重复元素的, 如果在存储的时候逐个equals()比较, 效率较低,哈希算法提高了去重复的效率, 降低了使用equals()方法的次数

当HashSet调用add()方法存储对象的时候, 先调用对象的hashCode()方法得到一个哈希值, 然后在集合中查找是否有哈希值相同的对象 如果没有哈希值相同

的对象就直接存入集合 ,如果有哈希值相同的对象, 就和哈希值相同的对象逐个进行equals()比较,比较结果为false就存入, true则不存。

 b)TreeSet:有序,不可重复。可以指定一个顺序, 对象存入之后会按照指定的顺序排列

  1)自然顺序(Comparable)
  TreeSet类的add()方法中会把存入的对象提升为Comparable类型

  调用对象的compareTo()方法和集合中的对象比较

  根据compareTo()方法返回的结果进行存储

  
  2)比较器顺序(Comparator)
  创建TreeSet的时候可以指定一个Comparator

  如果传入了Comparator的子类对象, 那么TreeSet就会按照比较器中的顺序排序

  add()方法内部会自动调用Comparator接口中compare()方法排序

  调用的对象是compare方法的第一个参数,集合中的对象是compare方法的第二个参数

  3)两种方式的区别

  TreeSet构造函数什么都不传, 默认按照类中Comparable的顺序(没有就报错ClassCastException)

  TreeSet如果传入Comparator, 就优先按照Comparator

三、Map

1)HashMap和Hashtable的区别
Hashtable是JDK1.0版本出现的,是线程安全的,效率低;HashMap是JDK1.2版本出现的,是线程不安全的,效率高

Hashtable不可以存储null键和null值;HashMap可以存储null键和null值

2)LinkedHashMap:链表实现,存放顺序和取出顺序一致

3)TreeMap:可以根据键进行排序,排序规则的指定同TreeSet相同

4)Map的遍历方式(包含增强for循环)

public static void print1(Map map){
        Set keys = map.keySet();
        Iterator iter = keys.iterator();
        while(iter.hasNext()){
            Character key = (Character)iter.next();
            Integer value = (Integer)map.get(key);
            System.out.println(key + ":" + value);
        }
    }

public static void print2(Map map){
        Set entrys = map.entrySet();
        Iterator iter = entrys.iterator();
        while(iter.hasNext()){
            Map.Entry entry = (Map.Entry)iter.next();
            Character key = (Character)entry.getKey();
            Integer value = (Integer)entry.getValue();
            System.out.println(key + ":" + value);
        }
    }

public static void print3(Map map){
        Set entry = map.entrySet();
        for(Object entrys : entry){
            Map.Entry entryss = (Map.Entry)entrys;
            System.out.println(entryss.getKey() + ":" + entryss.getValue());
        }
    }

public static void print4(Map map){
        Set keys = map.keySet();
        for(Object o : keys){
            Character key = (Character)o;
            System.out.println(key + ":" + map.get(key));
        }
时间: 2024-12-12 18:25:52

类集框架解析的相关文章

类集框架

什么是类集框架? 类集框架是一组类和接口,位于java.util包中,主要用于储存和管理对象,主要分为三大类:集合.列表.映射 集合(Set):Set是接口,对象不按特定的方式排序(把对象放入Set的顺序和从Set中取出的顺序不一定一致),且没有重复对象 列表(List):有个接口叫List,对象按照索引位置排序,可以有重复的对象 映射(Map):Map也是个接口,每一个元素包含一个键对象和一个值对象,键不可以重复,值可以重复 类集框架的主体结构如下: 举个例子:接口List和实现类ArrayL

类集框架(三)

1. Map和HashMap的使用方法 2. JDK帮助文档的使用方法 1. Map和HashMap的使用方法 2. JDK帮助文档的使用方法 帮助文档下载chm格式的英文版, 在索引里面搜索Map 1 import java.util.Map; 2 import java.util.HashMap; 3 4 public class Test{ 5 public static void main(String args []){ 6 HashMap<String,String> hashMa

java:类集框架

类集框架:jdk提供的一系列类和接口,位于java.util包当中,主要用于存储和管理对象,主要分为三大类:集合.列表和映射. 集合Set:用于存储一系列对象的集合.无序.不允许重复元素. 列表List:用来存储有顺序的一组数据的集合.有序 映射Map:以键值对的方式进行数据存储的集合. 类集框架主体结构: 主要方法:add.clear.isEmpty.remove.size ArrayList 继承关系:Iterator<--Collection<--List<--ArrayList实

浅谈java类集框架和数据结构(2)

继续上一篇浅谈java类集框架和数据结构(1)的内容 上一篇博文简介了java类集框架几大常见集合框架,这一篇博文主要分析一些接口特性以及性能优化. 一:List接口 List是最常见的数据结构了,主要有最重要的三种实现:ArrayList,Vector,LinkedList,三种List均来自AbstracList的实现,而AbstracList直接实现了List接口,并拓展自AbstractCollection. 在三种实现中,ArrayList和Vector使用了数组实现,可以认为这两个是

java中的类集框架

1.什么是类集框架 1.是一组类和接口 2.位于java.util包当中 3.主要用于用户存储和管理对象 4.主要分为三大类——集合.列表和映射 2.类集框架图 虚线框的表示接口,实线框的表示实现类 Collection接口中的主要方法 Iterator中的主要方法是hasnext()和next()方法 例子: 3.Map和HashMap的使用方法‘ 什么是映射 4.JDK帮助文档的使用方法

25.类集框架

什么是类集框架 类集框架是一组类和接口 位于java.util包中 主要用户储存和管理对象 主要分为三大类—集合.列表和映射 集合的种类 什么是集合 集合中的对象不按特定的方式排列,并且没有重复对象 什么是列表(List) 集合中对象按照索引位置排序,可以有重复对象 什么是映射(Map) 集合中的每一个元素包含一个键对象和一个值对象,键不可以重复,值可以重复 类集框架的基础结构 //导入List接口和ArrayList实现类 import java.util.List; import java.

16.数组、类集框架

1.数组定义方法 静态声明法 int arr[]={1,1,2,3}; 动态声明法 int arr[]=new int[10];//创建一个arr长度为10的 2.类集框架    2.1定义 JDK的一组类和接口,位于java.util包中,主要用于存储和管理对象. 和数组相比:容量自动扩充,存储方式多.    2.2种类 存储数据方式:集合(Set,无序,不允许重复元素).列表(List集合中对象按照索引位置排序,可以有重复对象).映射(Map,一一对应) 框架主题结构    2.3使用  

41.类集框架(一)

学习要点: 什么是类集框架 集合的种类 类集框架的基础机构 什么是类集框架 类集框架 是一组类和接口 位于java.util包当中: 主要用户存储和管理对象: 主要分为三大类-集合.列表和映射 什么是集合(Set) 集合中的对象 没有顺序,并且没有重复对象 什么是列表(List) 集合中对象按照索引位置排序,可以有重复对象 什么是映射(Map) 集合中每个元素包含一个键对象和一个值对象,键不可以重复,值可以重复 import java.util.List; import java.util.Ar

类集框架1

1.什么是类集框架 1.类集框架是一组类和接口: 2.位于java.util包当中; 3.主要用户存储和管理对象: 4.主要分为三大类-集合.列表.和映射: 什么是集合(Set): 集合中的对象不按特定的方式排序,并且没有重复对象 什么是列表(List): 集合中对象按照索引位置排序,可以有重复的对象 什么是映射(Map): 集合中的每一个元素包含一个键对象和一个值对象,键不可以重复,值可以重复 类集框架的主体结构 ArrayList是一个容器 和数组类似 和数组的区别 声明数组的时候 数组的长