集合框架— —学习总结

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了集合框架— —学习总结相关的知识,希望对你有一定的参考价值。

学习的集合框架示意图:

技术分享

一、Collection

特点:无序,可重复

 (1)功能与方法:

技术分享

二、代码演练

package Java20170402;
import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
class Student01{
    private String name;
    private String studentId;
    public Student01(String name, String studentId) {
        super();
        this.name = name;
        this.studentId = studentId;
    }
    public String toString() {
        return studentId+"--"+name;
    }
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        Student01 other = (Student01) obj;
         if (studentId == other.studentId)
            return true;
        return false;
    }
}
public class CollectionDemo {
    public static void main(String[] args) {
        System.out.println("----------------初阶方法----------------");
        Collection<String> c = new ArrayList<String>();
        Collection<String> c1 = new ArrayList<String>();
        c.add("one");//add的返回值均为true,这里就不再赘述
        c.add("two");
        c.add("three");
        c1.add("柯西");
        c1.add("高斯");
        System.out.println("(1)add:创建的集合c为:"+c);
        c.addAll(c1);
        System.out.println("(2)addAll:此时的集合c为:"+c);
        boolean b1 = c.contains("柯西");
        System.out.println("(3)contains:此时的集合是否包含“柯西”:"+b1);
        boolean b2 = c.containsAll(c1);
        System.out.println("(4)containsAll:此时的集合是否包含c1集合的所有元素:"+b2);
        int len = c.size();
        System.out.println("(5)size:此时集合的元素数为:"+len);
        boolean b3 = c.isEmpty();
        System.out.println("(6)isEmpty:此时集合是否为空:"+b3);
        boolean b4 = c.remove("高斯");
        System.out.println("(7)是否移除了“高斯”:"+b4+";移除后的集合c为:"+c);
        boolean b5 = c.removeAll(c1);
        System.out.println("(8)是否移除了c1的所有元素:"+b5+";移除后的集合c为:"+c);
        boolean b6 = c.retainAll(c1);
        System.out.println("(9)判断集合c此时是否发生了改变:"+b6+";此时集合c变为之前的集合c与c1的交集:"+c);
        c.add("柯西");
        System.out.println("     集合c添加“柯西”后为:"+c);
        boolean b7 = c.retainAll(c1);
        System.out.println("     判断集合c此时是否发生了改变:"+b7+";此时集合c为:"+c);
        c.clear();
        System.out.println("(10)清除c中的所有元素,此时集合c为:"+c);
        System.out.println("----------------高阶方法----------------");
        System.out.println("-----equals方法-----");
        Collection<String> c2 = new ArrayList<String>();
        Collection<String> c3 = new ArrayList<String>();
        c2.add("柯西");
        c2.add("高斯");
        c3.add("柯西");
        System.out.println("(11)此时集合c2为:"+c2);
        System.out.println("       此时集合c3为:"+c3);
        boolean b8 = c2.equals(c3);
        System.out.println("    c2.equals(c3)为:"+b8);
        c3.add("高斯");
        System.out.println("       此时集合c2为:"+c2);
        System.out.println("       此时集合c3为:"+c3);
        boolean b9 = c2.equals(c3);
        System.out.println("    c2.equals(c3)为:"+b9);
        Collection<Student01> c4 = new ArrayList<Student01>();
        c4.add(new Student01("柯西","001"));
        c4.add(new Student01("高斯","002"));
        System.out.println("       此时c4集合为:"+c4);
        Collection<Student01> c5 = new ArrayList<Student01>();
        c5.add(new Student01("柯西","001"));
        c5.add(new Student01("高斯","003"));
        System.out.println("       此时c5集合为:"+c5);
        boolean b10 = c4.equals(c5);
        System.out.println("    c4.equals(c5)为:"+b10);
        Collection<Student01> c6 = new ArrayList<Student01>();
        c6.add(new Student01("柯西","001"));
        c6.add(new Student01("欧拉","002"));
        System.out.println("       此时c6集合为:"+c6);
        boolean b11 = c4.equals(c6);
        System.out.println("    c4.equals(c6)为:"+b11);
        System.out.println("equals方法就简单举例,后面会专门整理一个专题");
        System.out.println("-----遍历集合-----");
        System.out.println("(12)方法一:toArray(),将集合转换成数组进行遍历");
        Collection<String> c7 = new ArrayList<String>();
        c7.add("one");
        c7.add("two");
        c7.add("three");
        System.out.println("集合c7为:"+c7);
        Object[] objects = c7.toArray();
        for(int i=0;i<objects.length;i++){
            //System.out.println(objects[i]);  //强转为字符串输出更好
            String str = (String)objects[i];
            System.out.println(str);
        }
        System.out.println("(13)方法二:iterator(),利用迭代器遍历集合");
        System.out.println("集合c7为:"+c7);
        Iterator i = c7.iterator();
        while(i.hasNext()){
            Object obj = i.next();
            String str1 = (String)obj;
            System.out.println(str1);
        }
System.out.println("方法三:增强for循环");
System.out.println("集合c7为:+c7");
for(String s:c7){
System..out.println(s);
} System.out.println(
"-----hashCode()-----"); System.out.println("初步了解hashCode是什么东西"); Collection<String> c8 = new ArrayList<String>(); c8.add("one"); System.out.println("这就是hashCode()方法的返回值,即hashCode值:"+c8.hashCode()); } }

运行结果为:

----------------初阶方法----------------
(1)add:创建的集合c为:[one, two, three]
(2)addAll:此时的集合c为:[one, two, three, 柯西, 高斯]
(3)contains:此时的集合是否包含“柯西”:true
(4)containsAll:此时的集合是否包含c1集合的所有元素:true
(5)size:此时集合的元素数为:5
(6)isEmpty:此时集合是否为空:false
(7)是否移除了“高斯”:true;移除后的集合c为:[one, two, three, 柯西]
(8)是否移除了c1的所有元素:true;移除后的集合c为:[one, two, three]
(9)判断集合c此时是否发生了改变:true;此时集合c变为之前的集合c与c1的交集:[]
     集合c添加“柯西”后为:[柯西]
     判断集合c此时是否发生了改变:false;此时集合c为:[柯西]
(10)清除c中的所有元素,此时集合c为:[]
----------------高阶方法----------------
-----equals方法-----
(11)此时集合c2为:[柯西, 高斯]
       此时集合c3为:[柯西]
    c2.equals(c3)为:false
       此时集合c2为:[柯西, 高斯]
       此时集合c3为:[柯西, 高斯]
    c2.equals(c3)为:true
       此时c4集合为:[001--柯西, 002--高斯]
       此时c5集合为:[001--柯西, 003--高斯]
    c4.equals(c5)为:false
       此时c6集合为:[001--柯西, 002--欧拉]
    c4.equals(c6)为:true
equals方法就简单举例,后面会专门整理一个专题
-----遍历集合-----
(12)方法一:toArray(),将集合转换成数组进行遍历
集合c7为:[one, two, three]
one
two
three
(13)方法二:iterator(),利用迭代器遍历集合
集合c7为:[one, two, three]
one
two
three
方法三:增强for循环
集合c7为:[one, two, three]
one
two
three
-----hashCode()----- 初步了解hashCode是什么东西 这就是hashCode()方法的返回值,即hashCode值:110213

 二、List

(1)List的简单介绍:

特点:有序,可重复

     有序的 collection(也称为序列)。此接口的用户可以对列表中每个元素的插入位置进行精确地控制。用户可以根据元素的整数索引(在列表中的位置)访问元素,并搜索列表中的元素。与 set 不同,列表通常允许重复的元素。更确切地讲,列表通常允许满足 e1.equals(e2) 的元素对 e1 和 e2.

(2)功能与方法:

技术分享

技术分享

 (3)代码演练:

package Java20170404;

import java.util.ArrayList;
import java.util.List;

public class ListDemo {
    public static void main(String[] args) {
        System.out.println("--------------------初阶方法--------------------");
        System.out.println(":(1)add(E);(2)add(int,E);(3)addAll(Collection);(4)addAll(int,Collection)"
          + "(5)contains(Object);(6)containsAll(Collection);(7)get(int);(8)hashcode;(9)indexOf(object);"
          + "(10)isEmpty();(11)clear();(12)equals(object);(13)iterator;(14)lastIndexOf(object)(15)listIterator()"
          + "(16)listIterator(int);(17)remove(int);(18)remove(object);(19)removeAll(Collection);(20)retainAll(Collection)"
          + "(21)set(int,E);(22)size();(23)subList(int,int);(24)toArray()"
           );
        List<String> list = new ArrayList<String>();
        list.add("one");
        list.add("two");
        list.add(1,"three");
        System.out.println("集合list为:"+list);
        List<String> list1 = new ArrayList<String>();
        list1.add("1");
        list1.add("2");
        list.addAll(list1);
        System.out.println("集合list为:"+list);
        list.addAll(1, list1);
        System.out.println("集合list为:"+list);
        int index = list.indexOf("1");
        System.out.println("1第一次出现的位置下标为:"+index);
        int index1 = list.lastIndexOf("1");
        System.out.println("1最后一次出现的位置下标为:"+index1);
        list.set(3, "3");
        System.out.println("将three修改为3:"+list);
        List<String> sub = list.subList(1, 3);   //左闭右开
        System.out.println("截取的集合为:"+sub);
    }
}

 运行结果为:

--------------------初阶方法--------------------
:(1)add(E);(2)add(int,E);(3)addAll(Collection);(4)addAll(int,Collection)(5)contains(Object);(6)containsAll(Collection);(7)get(int);(8)hashcode;(9)indexOf(object);(10)isEmpty();(11)clear();(12)equals(object);(13)iterator;(14)lastIndexOf(object)(15)listIterator()(16)listIterator(int);(17)remove(int);(18)remove(object);(19)removeAll(Collection);(20)retainAll(Collection)(21)set(int,E);(22)size();(23)subList(int,int);(24)toArray()
集合list为:[one, three, two]
集合list为:[one, three, two, 1, 2]
集合list为:[one, 1, 2, three, two, 1, 2]
1第一次出现的位置下标为:1
1最后一次出现的位置下标为:5
将three修改为3:[one, 1, 2, 3, two, 1, 2]
截取的集合为:[1, 2]

三、Set

(1)Set的简单介绍:

特点:无序,不可重复

一个不包含重复元素的 collection。更确切地讲,set 不包含满足 e1.equals(e2) 的元素对 e1 和 e2,并且最多包含一个 null 元素。

(2)功能与方法:

技术分享

(3)代码演练:

package Java20170404;
import java.util.HashSet;
import java.util.Set;
public class SetDemo {
    public static void main(String[] args) {
        Set<String> set = new HashSet<String>();
        set.add("one");
        set.add("two");
        set.add("three");
        boolean b1 = set.add("two");
        System.out.println(b1);
        System.out.println(set);
    }
}

 运行结果为:

false
[one, two, three]

四、Map

(1)Map的简单介绍:

特点:键值对(Key---Value),Key不可重复,Value可重复,Key---Set,Value---Collection

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

Map 接口提供三种collection 视图,允许以键集、值集或键-值映射关系集的形式查看某个映射的内容。映射顺序 定义为迭代器在映射的 collection 视图上返回其元素的顺序。某些映射实现可明确保证其顺序,如 TreeMap 类;另一些映射实现则不保证顺序,如 HashMap 类。

注:将可变对象用作映射键时必须格外小心。当对象是映射中某个键时,如果以影响 equals 比较的方式更改了对象的值,则映射的行为将是不确定的。此项禁止的一种特殊情况是不允许某个映射将自身作为一个键包含。虽然允许某个映射将自身作为值包含,但请格外小心:在这样的映射上 equals 和 hashCode 方法的定义将不再是明确的。

(2)功能与方法:

 技术分享

(3)代码演练:

package Java20170404;

import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;

public class MapDemo {
    public static void main(String[] args) {
        System.out.println("方法:(1)clear();(2)containsKey(Object key);(3)containsValue(Object value);(4)entrySet();"
                + "(5)equals(Object o);(6)get(Object key);(7)hashCode();(8)isEmpty();(9)keySet();(10)put(K key,V value)"
                + "(11)putAll(Map);(12)remove(Object key);(13)size();(14)values()");
        Map<String,String> map = new HashMap<String,String>();
       map.put("001", "one");
       map.put("002", "two");
       map.put("003", "three");
       System.out.println(map);
       Object obj01 = map.get("001");
       System.out.println(obj01);
       map.remove("002");
       System.out.println(map);
       Set<String> key =  map.keySet();
       System.out.println("key:"+key);
       Collection<String> value =  map.values();
       System.out.println("value:"+value);
       Set<Entry<String, String>> m = map.entrySet();
       System.out.println(m);
       System.out.println("----------Map集合的遍历----------");
       System.out.println("方法一、遍历所有的Key:");
       for(String k:key){
           String v= map.get(k);
           System.out.println(k+"---"+v);
       }
       System.out.println("方法二、遍历所有的key-value:");
       for(Entry<String, String> kv :m){
           String k = kv.getKey();
           String v = kv.getValue();
           System.out.println(k+"---"+v);
       }
       System.out.println("方法三、遍历所有的value(不常用):");
       for(String v:value){
           System.out.println(v);
       }
    }
}

 

运行结果:

方法:(1)clear();(2)containsKey(Object key);(3)containsValue(Object value);(4)entrySet();(5)equals(Object o);(6)get(Object key);(7)hashCode();(8)isEmpty();(9)keySet();(10)put(K key,V value)(11)putAll(Map);(12)remove(Object key);(13)size();(14)values()
{001=one, 002=two, 003=three}
one
{001=one, 003=three}
key:[001, 003]
value:[one, three]
[001=one, 003=three]
----------Map集合的遍历----------
方法一、遍历所有的Key:
001---one
003---three
方法二、遍历所有的key-value:
001---one
003---three
方法三、遍历所有的value:
one
three

 

四、Queue与Deque见其他专题











以上是关于集合框架— —学习总结的主要内容,如果未能解决你的问题,请参考以下文章

201621123048《Java程序设计》第九周学习总结

201621123062《java程序设计》第九周作业总结

201621123037 《Java程序设计》第9周学习总结

201621123057 《Java程序设计》第9周学习总结

Java集合框架学习总结

201621123002《java程序设计》第九周学习总结