Java 集合类总结

一、集合类概述
集合类被称为容器,提到容器不难想到数组。
集合与数组:
1.数组的长度是固定的,集合的长度是可变的。(集合是动态数组)
2,数组来存放基本类型的数据,集合用来存放对象的引用。
常用的集合有List集合、Set集合和Map集合,其中List与Set继承了Collection接口。

二、Collection 接口
collection接口通常不能直接使用,List接口与set接口都继承了Collection接口,以此collection接口的方法List与Set也可以使用。


image.png

Collection接口常用方法
add(E e) 将指定的对象添加到该集合中
remove(Object o) 将指定的对象从该集合中移除
isEmpty() 返回boolean值,用于判断当前集合是否为空
iterator() 返回在此Collection的元素上进行迭代的迭代器。用于遍历集合中的对象
size() 返回int型,获取该集合中元素的个数。

Collection list =new ArrayList();//创建对象
    //1.添加对象
    list.add("hello");
    list.add("word");
    list.add("你好,世界");
    //2.遍历集合中的对象
    System.out.println("遍历对象");
    Iterator it = list.iterator();//创建迭代器
    while(it.hasNext()) {//判断是否有下一个元素
        String str = (String)it.next();
        System.out.println(str);
    }
    //3.判断集合是否为空和获取集合长度
    System.out.println("集合是否为空:"+list.isEmpty()+"集合的长度为:"+list.size());
    //4.删除指定对象
    list.remove("word");
    System.out.println("删除指定对象后,遍历对象");
    Iterator its = list.iterator();//创建迭代器
    while(its.hasNext()) {//判断是否有下一个元素
        String str = (String)its.next();
        System.out.println(str);    
    }
    System.out.println("集合是否为空:"+list.isEmpty()+"集合的长度为:"+list.size());
image.png
image.png

三、List集合
1.List集合包括List接口以及List接口的所有实现类。List集合中的元素允许重复,各元素的顺序就是对象插入的元素。用户可以通过使用索引(元素在集合中的位置)来访问集合中的元素。
2.list接口包含了Collection接口的所有方法, 即:add、remove、iterator、isEmpty、size方法。
3.list中两个特有的方法
1.get(int index) 获得指定索引位置的元素
2.set(int index,Object obj) 将集合中指定索引的对象修改为指定的对象
4.List接口的常用实现类有ArrayList和LinkedList
语法:List<E> list = new ArrayList<>();
List<E> list = new LinkedList<>();
E可以为合法的Java数据类型。必须为类,如:String、Integer、Boolean、Byte、Character、Double、Number。

public static void main(String[] args) {
     List<Integer> list =new ArrayList<>();//创建集合对象
     //添加元素
     list.add(1);
     list.add(2);
     list.add(3);
     //获取元素
     int a = list.get(2);
     System.out.println(a);//3
     
     //设置元素
     list.set(1, 4);
     //遍历集合
     Iterator c = list.iterator();
     while(c.hasNext()) {
         int b = (int) c.next();
         System.out.println(b);//1 4 3
         
     }
}   

四、Set集合
1.Set集合中的对象不按特定的方式排序,简单把对象加入集合,但Set类不能有重复的对象。
2.Set接口常用的实现类有HashSet和TreeSet
Hashset不能保证Set的迭代顺序
TreeSet可通过比较来实现顺序的排序
3.Set接口继承了Collection接口,因此包含Collection接口所有方法。

4.1 TreeSet
Treeset类的新增方法:
1.first() 返回set类当前第一个元素
2.last() 返回Set中当前最后一个元素
3.comparator() 排序的比较器

  1. headSet(E toElement) 返回新的集合,在toElement(不包括)之前的对象
    5.subSet(E fromElement, E fromElement) 返回新的集合,在fromElement(包括)和fromElement(不包括)之间的对象

6.tailSet(E fromElement) 返回新的集合,在fromElement(包括)之后的对象
存入TreeSet类实现的Set集合必须实现Comparable接口,接口中的compareTo()用于比较,
该对象小于、等于、大于指定对象,则返回负整数、0和正整数
语法:TreeSet tree = new TreeSet();
步骤:1.创建新的类
实现Comparable接口
重写compareTo方法
2.主方法
创建对象
将对象添加到集合中

//1.创建接口Comparable
public class teacher implements Comparable<Object>{
int age;
double score;
String name;
//2.重写compareTo方法
@Override
public int compareTo(Object o) {
  teacher tea =(teacher)o;
  int result =this.age>tea.age?1:(this.age==tea.age?0:-1);
    return result;
}
//3.创建构造方法
public teacher(int age, double score, String name) {
    //super();
    this.age = age;
    this.score = score;
    this.name = name;
}

//定义toString方法
@Override
public String toString() {
    return "teacher [age=" + age + ", score=" + score + ", name=" + name + "]";//输出
}


}



public static void main(String[] args) {
    //1.创建对象
    teacher c1 = new teacher(18,60.0,"nn");
    teacher c2 = new teacher(21,67.0,"snn");
    teacher c3 = new teacher(12,66.1,"enn");
    teacher c4 = new teacher(19,63.8,"tnn");
    //2.创建集合并添加对象
    TreeSet tree =new TreeSet();
    tree.add(c1);
    tree.add(c2);
    tree.add(c3);
    tree.add(c4);
    //3.遍历集合
    Iterator it = tree.iterator();
      while(it.hasNext()){
        teacher str=(teacher)it.next();
        System.out.println(str.toString());
    }
      
    
}   
image.png

4.2 HashSet 类
语法:Set xx =new HashSet();

public static void main(String[] args) {
//1.创建对象
teacher c1 =new teacher(11,23.0,"nn");
teacher c2 =new teacher(6,21.0,"nnd");
teacher c3 =new teacher(14,87.0,"nnf");
teacher c4 =new teacher(87,45.0,"ndn");

//2.建立hash并插入
Set set1 =new HashSet();
set1.add(c1);
set1.add(c2);
set1.add(c3);
set1.add(c4);
//3.遍历集合
Iterator it = set1.iterator();
while(it.hasNext()) {
    teacher str = (teacher)it.next();
    System.out.println(str);
}
}   
image.png

五、Map集合
5.1 1.Map类没有Collection接口提供的方法,提供的是key到value的映射。Map中不能包含相同的key,每个key只能映射一个value。
2.常用的Map类方法:
put(K key,V value) 向集合内添加特定的key与value的映射关系
containsKey(Object key) 如果此映射包含指定key的映射关系,则返回true
containsValue(Object value) 如果此映射将一个或多个key映射到指定值,则返回true
get(Object key) 如果存在指定的key对象,则返回该对象对应的值,否则返回null
keySet() 返回该集合中的所有key对象形成的Set集合
values() 返回该集合中所有对象形成的Collection集合
1.Map接口的实现类有:HashMap和TreeMap
HashMap:基于哈希表的Map接口实现,允许使用null键和null值,必须保证键的唯一性。此类不保证映射的顺序,特别是它不保证该顺序持久不变。
TreeMap:集合关系中的映射关系具有一定的顺序,根据键对象按照一定的顺序排列的,不允许键的对象是null。(有序--->按照key来排序)

public static void main(String[] args) {
        Map map= new HashMap();
        //添加数据
        map.put("01", "小王");
        map.put("02","小刘");
        map.put("03","xx");
        //判断集合中是否包含相应的key和value
        System.out.println("在此集合中是否包含05:"+map.containsKey("05")+"在此集合中是否包含xx:"+map.containsValue("xx"));//在此集合中是否包含05:false在此集合中是否包含xx:true
        if(map.containsKey("01")) {
        System.out.println(map.get("01"));//获取key所对应的value  小王
        }
        else {
            System.out.println("不存在");
        }
        //将map赋值给set中(key对象)
        Set set =map.keySet();
        //遍历集合
        Iterator it = set.iterator();
        while(it.hasNext()) {
            String str = (String)it.next();
            System.out.println(str);
        }
        //将map赋值给collection中(值对象)
        Collection a = map.values();
        //遍历集合
        Iterator it1 = a.iterator();
        while(it1.hasNext()) {
            String str= (String)it1.next();
            System.out.println(str);
            
        }
        }   
image.png

5.2 Map接口的实现类

public class teacher{
    int age;
    String name;
//创建toString方法
    @Override
    public String toString() {
        return "teacher [age=" + age + ", name=" + name + "]";
    }
//构造方法
    public teacher(int age, String name) {
        super();
        this.age = age;
        this.name = name;
    }
}

    public static void main(String[] args) {
        //1.创建对象
        teacher c1 = new teacher(22,"小是");
        teacher c2 = new teacher(13,"小是");
        teacher c3 = new teacher(20,"小为");
        //2.创建HashMap(无序),并添加元素
        Map map = new HashMap();
            map.put(c1.age,c1.name);
            map.put(c2.age,c2.name);
            map.put(c3.age,c3.name);

        //3.获取map对象中的key和value,并将它们遍历
        Set set = map.keySet();
        Iterator s = set.iterator();
        while(s.hasNext()) {
            int str = (int)s.next();
            System.out.print(str+" ");
            System.out.print(map.get(str)+" ");
        }
}

image.png
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,884评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,755评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,369评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,799评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,910评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,096评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,159评论 3 411
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,917评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,360评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,673评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,814评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,509评论 4 334
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,156评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,882评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,123评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,641评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,728评论 2 351

推荐阅读更多精彩内容