Java学习----Collection\Map总结

集合(用于存放引用类型的数据,可变长的数组)

 

由图可见集合分为2大类型,单列集合(collection)与双列集合(Map)

其中单列集合又可分为2大类,既list和Set

其中list属于可重复集合,而且有索引,可以根据集合的下标去获取当前位置的元素

(使用时需要保证该下标的存在否则会报错)

java.lang.IndexOutOfBoundsException    下标越界异常 ----属于运行时异常

list集合

list集合的特点

  1. 可重复
  2. 有序(添加顺序和取出顺序相同)
  3. 可索引

 

list又细分为ArrayLiSt和LinkedList

ArrayList底层为数组结构   查询快、增删慢

LinkedList   底层是链表结构    查询慢、增删快

 

list中的主要方法

add(要添加的元素);

add(int index,要添加的元素)   在指定位置,添加元素

addAll(Collection<?>())    将collection集合的元素全部添加

remove(int index)    删除指定位置的元素

remove(Object o)    删除指定的元素

removeAll(Collection<?> c)   删除列表中的指定集合

contains(Object o)      判断集合中是否包含元素o

size()      返回集合的大小

 

4种list集合的遍历

1.创建集合

list<String> a=new ArrayList<>();

  1. 集合中添加元素
    a.add("dada");
    a.add("ggg");
    a.add("tt");

for循环遍历
for (int i = 0; i <a.size(); i++) {
    System.out.println(a.get(i));
}
增强for循环遍历
for (String str:a) {
    System.out.println(str);
}

迭代器遍历
Iterator it=a.iterator();
while (it.hasNext()){
    Object next = it.next();
    System.out.println(next);
}

列表迭代器(在迭代器遍历的同时允许对迭代器进行操作)
    ListIterator<String> it =s.listIterator();
    while(it.hasNext()){
        String next = it.next();
        System.out.println(next);
        if(next.equals("tt")){
            a.add("qq");

//此处未迭代器修改,不是集合修改        }
    }

System.out.println(s);
}

 

LinkedList特有的方法:

public void addFirst(E e) 在该列表开头插入指定的元素

public void addLast(E e) 将指定的元素追加到此列表的末尾

public E getFirst() 返回此列表中的第一个元素

public E getLast() 返回此列表中的最后一个元素

public E removeFirst() 从此列表中删除并返回第一个元素

public E removeLast() 从此列表中删除并返回最后一个元素

 

Set集合

Set集合的特点

  1. 元素存取无序
  2. 没有索引
  3. 不能存储重复元素

 

Set中的主要方法

add(要添加的元素);

add(int index,要添加的元素)   在指定位置,添加元素

addAll(Collection<?>())    将collection集合的元素全部添加

remove(int index)    删除指定位置的元素

remove(Object o)    删除指定的元素

removeAll(Collection<?> c)   删除列表中的指定集合

contains(Object o)      判断集合中是否包含元素o

size()      返回集合的大小

 

2种Set集合的遍历

Set<String> s =new HashSet<>();
s.add("String");
s.add("aaa");
s.add("bbb");
//遍历1
for (String d: s) {
     System.out.print(d);
}
System.out.println("-------------------");
//遍历2
Iterator it =s.iterator();
while (it.hasNext()){
     System.out.print(it.next());
}

HashSet集合的特点

      1.底层是哈希表结构

       2.元素存取无序

       3.没有索引

       4.不能存储重复元素

HashSet:底层数据结构是哈希表,线程是不同步的无序,高效;

HashSet集合保证元素唯一性:通过元素的hashCode方法,和equals方法完成的。

当元素的hashCode值相同时,才继续判断元素的equals是否为true。

如果为true,那么视为相同元素,不存。如果为false,那么存储。

如果hashCode值不同,那么不判断equals,从而提高对象比较的速度。

 

LinkedHashSet集合的概述和特点

      1.LinkedHashSet集合是HashSet集合的子类

      2.LinkedHashSet集合不能存储重复元素

      3.LinkedHashSet集合可以保证元素存取有序

 

TreeSet集合的特点

        1.元素有序。元素可以按照一定规则进行排序。具体要取决于构造方法

               TreeSet():根据元素的自然顺序进行排序

               TreeSet(Comparator c):根据指定的比较器进行排序

        2.TreeSet集合没有索引。只能通过迭代器、增强for循环进行遍历

        3.TreeSet集合不能存储重复元素

 

TreeSet:

用于对Set集合进行元素的指定顺序排序,排序需要依据元素自身具备的比较性。

如果元素不具备比较性,在运行时会发生ClassCastException异常。

所以需要元素实现Comparable接口,强制让元素具备比较性,复写compareTo方法

依据compareTo方法的返回值,确定元素在TreeSet数据结构中的位置。

TreeSet方法保证元素唯一性的方式:就是参考比较方法的结果是否为0,如果return 0,视为两个对象重复,不存。

 

注意:在进行比较时,如果判断元素不唯一,比如,同姓名,同年龄,才视为同一个人。

在判断时,需要分主要条件和次要条件,当主要条件相同时,再判断次要条件,按照次要条件排序。

 

TreeSet集合排序有两种方式,Comparable和Comparator区别:

1:让元素自身具备比较性,需要元素对象实现Comparable接口,覆盖compareTo方法。

2:让集合自身具备比较性,需要定义一个实现了Comparator接口的比较器,并覆盖compare方法,并将该类对象作为实际参数传递给TreeSet集合的构造函数。

第二种方式较为灵活。

Map集合

Map集合的特点

  1. Map是双列数据存储的集合
  2. map<k,v>  键值对存储,成对的存储
  3. map中的键是唯一的,不可重复的

Map中的主要方法

put<k,v>  添加

remove()   删除

get(Object key)   获取对应键的值

isEmpty()  判断集合是否为空

size()返回集合的大小

containsKey​(Object key)  是否包含key键

containsValue​(Object value)  是否包含value值

 

2种Map集合的遍历

使用增强for循环

Map<k,v> s =new HashMap<>();

Set<String > s1=s.keySet();  获取集合S中的键

for(String st :s1){//对集合s1进行遍历,获取集合M中的所有键

   s.get(s1);//获取对应的键所对应的值

sout();

}

使用Map中自带的遍历

for (Map.Entry<String,Student>  m11:m.entrySet()
     ) {
    String key = m11.getKey();
    Student value = m11.getValue();
    System.out.println("学号"+key+"姓名"+value.getName()+"年龄"+value.getAge());

}

 

Collections  工具类(只适应于list集合)

3种方法

Collections.sort(list);    排序

Collections.resverse(list);  反转

Collections.shuffle(list);    打乱

 

集合的使用技巧

看到Array就是数组结构,有角标,查询速度很快。

看到link就是链表结构:增删速度快,而且有特有方法。addFirst; addLast; removeFirst(); removeLast(); getFirst();getLast();

看到hash就是哈希表,就要想要哈希值,就要想到唯一性,就要想到存入到该结构的中的元素必须覆盖hashCode,equals方法。

看到tree就是二叉树,就要想到排序,就想要用到比较。

比较的两种方式:

一个是Comparable:覆盖compareTo方法;

一个是Comparator:覆盖compare方法。

LinkedHashSet,LinkedHashMap:这两个集合可以保证哈希表有存入顺序和取出顺序一致,保证哈希表有序。

 

集合什么时候用?

当存储的是一个元素时,就用Collection。当存储对象之间存在着映射关系时,就使用Map集合。

保证唯一,就用Set。不保证唯一,就用List。

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章