JavaSE集合类

JavaSE集合类

牛哄哄的柯南 2020-11-26 21:28:40 2376 收藏 16
文章标签: java set list map collection
版权
JavaSE集合类
概述
Java中集合类概述
Java中数组与集合的比较
Java中集合框架层次结构
Collection接口
Collection接口常用方法
Set接口
List接口
List接口常用方法
ArrayList
LinkedList
Map接口
Map接口常用方法
HashMap类
HashMap与TreeMap的比较
HashMap与Hashtable的比较
概述
Java中集合类概述
Java中集合类是用来存放对象的
集合相当于一个容器,里面包容着一组对象 —— 容器类
其中的每个对象作为集合的一个元素出现
Java API提供的集合类位于java.util包内

Java中数组与集合的比较
数组也是容器,它是定长的,访问较快,但是数组不会自动扩充
数组可以包含基本数据类型或引用类型的对象,而集合中只能包含引用类型的对象

Java中集合框架层次结构
在这里插入图片描述

Collection接口
· 一组称为元素的对象
· 一个Collection中可以放不同类型的数据
· 是Set接口和List接口的父类
· 是否有特定的顺序以及是否允许重复,取决于它的实现
Set - 无序的集合;不允许重复(HashSet)
List - 有序的集合;允许重复(ArrayList,LinkedList)

Collection接口常用方法
方法 含义
boolean add(Object) 集合中加入一个对象,成功时返回true
boolean addAll(Collection) 集合中加入另外一个集合对象
int size() 集合内容纳的元素数量
boolean isEmpty() 集合是否为空
boolean contains(Object) 集合内是否含有参数对象
Iterator iterator() 产生一个迭代器
Object[] toArray() 返回一个包含所有元素的对象数组
boolean remove(Object) 从集合中删除对象
boolean removeAll(Collection) 清空指定集合
boolean containsAll(Collection) 判断集合内是否包含子集
boolean retainAll(Collection) 仅保留此 collection 中那些也包含在指定 collection 的元素
Set接口
Set接口
· Collection的子接口
· 用来包含一组 无序无重复 的对象
无序 — 是指元素存入顺序和集合内存储的顺序不同;
无重复 — 两个对象e1和e2,如果e1.equals(e2)返回true,则认为e1和e2重复,在set中只保留一个。
Set接口的实现类
· HashSet — HashSet的特性在于其内部对象的散列存取,即采用哈希技术
· TreeSet — TreeSet存入的顺序跟存储的顺序不同,但是存储是按照排序存储的
使用foreach方式遍历Set集合

样例代码:

package com.training.csdn;

import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;

/**

  • Keafmd

  • @ClassName: MySet

  • @Description: Set讲解

  • @author: 牛哄哄的柯南

  • @date: 2020-11-26 19:23
    */
    public class MySet {

    public static void main(String[] args) {
    //类的构造
    Set set = new HashSet(); //面向接口编程

     //add
     set.add(50);
     set.add(60); //int     Integer
     set.add(200);
     set.add(new Integer(200));
    
     //size() 获取集合长度
     System.out.println("set.size(): "+set.size());
    
    
     //使用另外一个集合构造set对象
     Set set2 = new HashSet();
     set2.addAll(set);  // 全部添加进去
    
     // 打印元素个数
     System.out.println("set2.size(): "+set2.size());
    
    
     //isEmpty 是否为空
     System.out.println("set2.isEmpty(): "+set2.isEmpty());
    
     //判断是否包含某个元素
     System.out.println( "set2.contains(60): "+set2.contains(60));
     System.out.println( "set2.contains(200): "+set2.contains(new Integer(200)));
    
    
     //迭代器 遍历Set
     Iterator it = set2.iterator();
    
     while(it.hasNext()){
         Object item = it.next();
         System.out.println("元素: "+item);
     }
    
     //移除元素, 通过equals 和hashcode 判断是否存在元素
     set.remove(50);
     System.out.println("移除后的元素个数: "+set.size());
    
    
     Set set3 = new HashSet();
     set3.add("abc");
     set3.add("def");
     set3.add("ghi");
     set3.add("aaa");
    
    
    
     Set set4 = new HashSet();
     set4.add("abc");
     set4.add("def");
     set4.add("kkk");
     set4.add("aaa");
    
     System.out.println("set3.size: "+set3.size());
    
     //  从set3中移除set3和set4的 交集元素
    

// set3.removeAll(set4);
// System.out.println("移除后的集合长度: "+set3.size());
//
//
// for (Object o : set3) {
// System.out.println("set3的元素有: "+o);
// }

    // 保留 set3 和 set4 的交集元素
    set3.retainAll(set4);
    System.out.println("retainAll.size: "+set3.size());

    for (Object o : set3) {
        System.out.println("set3的元素有: "+o);
    }



    //清空set集合
    set3.clear();
    System.out.println(set3.size()); //0
}

}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
运行效果:

set.size(): 3
set2.size(): 3
set2.isEmpty(): false
set2.contains(60): true
set2.contains(200): true
元素: 50
元素: 200
元素: 60
移除后的元素个数: 2
set3.size: 4
retainAll.size: 3
set3的元素有: aaa
set3的元素有: abc
set3的元素有: def
0

Process finished with exit code 0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
List接口
List接口常用方法
方法 含义
void add(int index,Object element) 在列表中的index位置,添加element元素
Object get(int index) 返回列表中指定位置的元素
int indexOf(Object o) 在list中查询元素的索引值,如不存在,返回-1。
int lastIndexOf(Object o) List中如果存在多个重复元素,indexOf()
ListIterator listIterator() 返回列表中元素的列表迭代器
Object remove(int index) 移除列表中指定位置的元素
Object set(int index,Object element) 用指定元素替换列表中指定位置的元素
ArrayList与LinkedList的比较:
存储结构:
ArrayList是线性顺序存储。
LinkedList对象间彼此串连起来的一个链表。
操作性能:
ArrayList适合随机查询的场合。
LinkedList元素的插入和删除操作性高。
LinkedList功能要多一些。

ArrayList
讲解代码:

package com.CSDN.day26;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;

/**

  • Keafmd

  • @ClassName: MyArrayList

  • @Description: ArrayList

  • @Author: 牛哄哄的柯南

  • @Date: 2020/11/26 21:01
    **/
    public class MyArrayList {
    public static void main(String[] args) {
    //
    List list1 = new ArrayList();
    list1.add(“张三”);
    list1.add(“李四”);
    list1.add(“李四”);
    list1.add(“王五”);

     System.out.println("list1.size()\t"+list1.size());
    
     List list2 = new ArrayList(list1);
     System.out.println("list2.size()\t"+list2.size());
    
     System.out.println("========================================================");
     //通过下标的形式访问每一个元素
    

// System.out.println(“list1.get(0)\t”+list1.get(0));
// System.out.println(“list1.get(1)\t”+list1.get(1));
// System.out.println(“list1.get(2)\t”+list1.get(2));
for (int i = 0; i < list1.size(); i++) {
System.out.println(“list1.get(”+i+")\t"+list1.get(i));
}

    System.out.println("=======================增强for遍历=================================");
    for (Object o : list2) {
        System.out.println("item\t"+o);
    }

    System.out.println("=======================Iterator遍历=================================");
    for(Iterator it = list2.iterator(); it.hasNext() ; ){
        System.out.println("iterator Item \t"+it.next());
    }
    System.out.println("=======================forEach遍历=================================");

// list2.forEach(System.out::println);
list2.forEach(x->System.out.println(“forEach item\t”+x));

    System.out.println("=======================add(index,Object el)=================================");

    List list3 =new  ArrayList();
    list3.add("abc");
    list3.add("def");
    list3.add("jqk");

    //list3 add(index ,el)
    list3.add(1,"insert");
    list3.forEach(x->System.out.println("list3 item\t"+x));
    System.out.println("=======================add(index,Object el)=================================");
    //list3 update(index ,el)
    list3.set(1,"update");
    list3.forEach(x->System.out.println("list3 item\t"+x));

    //indexOf/lastIndexOf ,返回索引位置,如果找不到则返回-1

    System.out.println("list3.indexOf(\"def\")\t"+list3.indexOf("def"));
    //判断def是否重复
    if(list3.indexOf("def") != list3.lastIndexOf("def")){
        System.out.println("def重复了");
    }



    //listIterator
    ListIterator listIter = list3.listIterator(list3.size()-1);
    while (listIter.hasPrevious()){
        System.out.println("listIter.previous()\t"+listIter.previous());
    }
}

}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
运行结果:

list1.size() 4
list2.size() 4

list1.get(0) 张三
list1.get(1) 李四
list1.get(2) 李四
list1.get(3) 王五
=增强for遍历===========
item 张三
item 李四
item 李四
item 王五
=Iterator遍历===========
iterator Item 张三
iterator Item 李四
iterator Item 李四
iterator Item 王五
=forEach遍历===========
forEach item 张三
forEach item 李四
forEach item 李四
forEach item 王五
=add(index,Object el)===========
list3 item abc
list3 item insert
list3 item def
list3 item jqk
=add(index,Object el)===========
list3 item abc
list3 item update
list3 item def
list3 item jqk
list3.indexOf(“def”) 2
listIter.previous() def
listIter.previous() update
listIter.previous() abc

Process finished with exit code 0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
LinkedList
讲解代码:

package com.CSDN.day26;

import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.ListIterator;

/**

  • Keafmd

  • @ClassName: MyLinkedList

  • @Description: LinkedList

  • @Author: 牛哄哄的柯南

  • @Date: 2020/11/26 21:06
    **/
    public class MyLinkedList {
    public static void main(String[] args) {
    //
    List list1 = new LinkedList();
    list1.add(“张三”);
    list1.add(“李四”);
    list1.add(“李四”);
    list1.add(“王五”);

     System.out.println("list1.size()\t"+list1.size());
    
     List list2 = new LinkedList(list1);
     System.out.println("list2.size()\t"+list2.size());
    
     System.out.println("========================================================");
     //通过下标的形式访问每一个元素
    

// System.out.println(“list1.get(0)\t”+list1.get(0));
// System.out.println(“list1.get(1)\t”+list1.get(1));
// System.out.println(“list1.get(2)\t”+list1.get(2));
for (int i = 0; i < list1.size(); i++) {
System.out.println(“list1.get(”+i+")\t"+list1.get(i));
}

    System.out.println("=======================增强for遍历=================================");
    for (Object o : list2) {
        System.out.println("item\t"+o);
    }

    System.out.println("=======================Iterator遍历=================================");
    for(Iterator it = list2.iterator(); it.hasNext() ; ){
        System.out.println("iterator Item \t"+it.next());
    }
    System.out.println("=======================forEach遍历=================================");

// list2.forEach(System.out::println);
list2.forEach(x->System.out.println(“forEach item\t”+x));

    System.out.println("=======================add(index,Object el)=================================");

    List list3 =new  LinkedList();
    list3.add("abc");
    list3.add("def");
    list3.add("jqk");

    //list3 add(index ,el)
    list3.add(1,"insert");
    list3.forEach(x->System.out.println("list3 item\t"+x));
    System.out.println("=======================add(index,Object el)=================================");
    //list3 update(index ,el)
    list3.set(1,"update");
    list3.forEach(x->System.out.println("list3 item\t"+x));

    //indexOf/lastIndexOf ,返回索引位置,如果找不到则返回-1

    System.out.println("list3.indexOf(\"def\")\t"+list3.indexOf("def"));
    //判断def是否重复
    if(list3.indexOf("def") != list3.lastIndexOf("def")){
        System.out.println("def重复了");
    }

    System.out.println("================================================");

    ListIterator listIter = list3.listIterator();
    while (listIter.hasNext()){
        System.out.println("listIter.next()\t"+listIter.next());
    }
    System.out.println("=============================");
    //listIterator

// ListIterator listIter2 = list3.listIterator(list3.size());
// while (listIter2.hasPrevious()){
// System.out.println(“listIter2.previous()\t”+listIter2.previous());
// }

    LinkedList lList = new LinkedList();
    lList.addAll(list3);

    Object popItem = lList.pop(); //如果没有元素会抛异常
    Object pollItem = lList.poll();

    System.out.println(pollItem);



}

}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
运行结果:

list1.size() 4
list2.size() 4

list1.get(0) 张三
list1.get(1) 李四
list1.get(2) 李四
list1.get(3) 王五
=增强for遍历===========
item 张三
item 李四
item 李四
item 王五
=Iterator遍历===========
iterator Item 张三
iterator Item 李四
iterator Item 李四
iterator Item 王五
=forEach遍历===========
forEach item 张三
forEach item 李四
forEach item 李四
forEach item 王五
=add(index,Object el)===========
list3 item abc
list3 item insert
list3 item def
list3 item jqk
=add(index,Object el)===========
list3 item abc
list3 item update
list3 item def
list3 item jqk
list3.indexOf(“def”) 2

listIter.next() abc
listIter.next() update
listIter.next() def
listIter.next() jqk

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值