java集合框架(Set、List、Map)

一、Set

    set用于存储无序的、不重复的元素。set是接口,不能被实例化,其子类HashSet和TreeSet可以被实例化。

(一)HashSet

    Hash即哈希,是一种散列函数不可逆单向映射,用于将任意长度的输入映射成一个较短的定长哈希值的输出,该输出也叫散列值。

    HashSet是Set集合的实现类。用于存储不重复无序的元素,存储元素的顺序是哈希值(输入的顺序和输出的不同,加入后也不会排序)。

1.HashSet集合的创建:

Set<String> objects = new HashSet<>();
//前面的set可以换成hashet,因为hashset本身可以被实例化。
//后面的hashset不能被换成set,因为set不能被实例化。

若将字符串切割并存入hashset中:

String a = sc.nextLine();
String[] b = a.split(",");
Set<String> objects = new HashSet<>();    
for(int i = 0;i<b.length;i++){
    objects.add(b[i]);
}

2.HashSet的常用方法

add()往集合中添加元素
contains()判断集合中是否存在某元素
remove()从集合中删除指定的元素
clear()清除集合中所有元素
size()获取集合中元素个数
isEmpty()判断集合元素是否为空
Iterator()返回元素的迭代器

3.遍历集合所有元素:

import java.util.*;
Iterator<String> iterator = objects.iterator();
        while(iterator.hasNext()){
            System.out.println(iterator.next());
        }
/**输出:123
        456
        ...*/

//若为直接输出整个集合,则直接打印集合即可:
System.out.print(objects);

(二)TreeSet

1.TreeSet集合的创建:

Set<String> set = new TreeSet<>();

若将字符串切割并存入Treeset中:

String a = sc.nextLine();
String[] b = a.split(",");
Set<String> set = new TreeSet<>();
for(int i = 0; i<b.length;i++){
    set.add(b[i]);
}

2.TreeSet的有序性:

    TreeSet 集合是 Set 集合的实现类,因此它也具有元素唯一性无序性,它的底层数据结构是 TreeMap 树结构。

    它既是无序的,又是有序的。无序指的是存储元素的顺序和输出顺序不同,但加入后会排序;有序指的是遍历集合时,输出的所有元素是有序的。

     TreeSet比HashSet耗时更(需对加入的元素排序)。

       添加元素到 TreeSet 集合时,TreeSet 集合会调用元素的 compareTo() 方法来比较元素之间的大小关系,并将集合元素按升序排列,这就是它的有序性,下表展示了 TreeSet 集合对各种数据类型的默认排序规则:

元素类型排序方式
数值类型按数值大小
Character类型按字符的 unicode 值来进行比较
Boolean类型true 大于 false
String类型按字符串中字符的 unicode 值进行比较
Date、Time类型

后边的时间、日期比前面的时间、日期大

另外,TreeSet的常用方法和使用迭代器遍历集合元素的方法和HashSet完全相同。 

二、List

List是一个有序集合,元素按顺序排列且可以重复。可以通过索引来访问、遍历元素。

 (一)ArrayList

ArrayList是List集合的实现类,它的底层数据结构是数组,因此它查询快、增删慢。

ArrayList加入的元素输出时保持输入的顺序。

1.ArrayList集合的创建:

List list=new ArrayList<String>();  

 若将字符串切割并存入ArrayList中:

String a = sc.nextLine();
String[] b = a.split(" ");
List<String> list = new ArrayList<>();
for(int i = 0;i<b.length;i++){
    list.add(b[i]);
}

 2.ArrayList的常用方法:

(1)增

list.add("list");//在集合末尾添加元素
list.add(1,"list");//在指定位置添加元素

(2)删

list.remove(0);//删除指定索引的元素
list.remove("list");//删除指定元素

 (3)改

list.set(1,"list");//修改索引位置的元素

 (4)查

list.get(1);//获取索引处的元素

3.遍历集合所有元素:

(1)使用迭代器遍历:

Iterator<String> iterator = list.iterator();
    while(iterator.hasNext()){
          System.out.println(iterator.next());
    }

 (2)使用foreach遍历:

for(String s:list){
    System.out.println(s);
}

(3)使用size()方法获取集合长度,用for循环遍历集合:

for(int x=0;x<list.size();x++){
    System.out.println(list.get(x));
}

 若直接输出整个集合,则直接打印list即可:

System.out.println(list);

(二)LinkedList

LinkedList是List集合的实现类,它的底层数据结构是链表,因此它查询慢、增删慢。

1.LinkedList集合的创建:

List<String> strings = new LinkedList<>(); 
//前面的List可换成LinkedList

若将字符串切割并存入LinkedList中:

String a = sc.nextLine();
String[] b = a.split(",");
LinkedList<String> list  =new LinkedList<>();
for(int i = 0;i<b.length;i++){
    list.add(b[i]);
}

2.LinkedList集合的方法:

LinkedList集合的增删改查方法和ArrayList一样,以下为它特有的方法:

方法名说明
addFirst(Object obj)在集合第一位添加一个元素
addLast(Object obj)在集合最后一位添加一个元素
getFirst()得到集合第一位的元素
getLast()得到集合的最后一位元素
removeFirst()删除集合的第一个元素
removeLast()删除集合的最后一个元素

 三、Map

        Map是一个从关键字到值的映射对象,Map中不能有重复的关键字,每个关键字最多能够映射到一个值。Map是无序的且关键字不能重复

(一) HashMap

        HashMap是map接口的实现类,它存储的内容是键值对映射,其中key、value都可以为null。

        HashMap是无序的,即被存入到HashMap中的元素,在遍历时,其输出是无序的。

 1.创建HashMap集合:

Map<String, Integer> hashMap = new HashMap<>();
//String、integer分别代表key和value的数据类型

若将有两个符号的字符串切割并分别存入HashMap的key和value中:

//例如:字符串为:粉蒸肉:50,红烧鱼:50,小炒牛肉:75,手撕包菜:20,蒜蓉虾:100
String a = sc.nextLine();
String[] b = a.split(",");//先按“,”将字符串切割成单个key-value对
// 创建 HashMap 集合,key为菜名,value为价格
Map<String, String> hashMap = new HashMap<>();
for(int i = 0;i<b.length;i++){
    String[] key = b[i].split(":");//对于每个key-value对,用“:”切割,并将值存入key
    hashMap.put(key[0], key[1]);
}

2.HashMap集合常用方法:

方法名方法说明
put()方法往集合中添加元素,key 值不可重复,重复时会覆盖之前的 value 值
size()方法返回集合长度
get(key)方法获取对应 key 值的 value 值
clear()方法清除集合中的所有元素
values()方法返回一个新集合,获取集合中所有元素的 values
keySet()方法返回一个新集合,获取集合中所有元素的 key
remove()方法根据 key 或者 key-value 去除集合中元素,并分别返回 value 值和 Boolean 值
iterator()方法返回一个迭代器对象
entrySet()方法将 Map 集合每个 key-value 转换为一个 Entry 对象,并返回由所有的 Entry 对象组成的 Set 集合
containsKey()判断集合中是否含右指定的 key 值

3.HashMap的遍历:

(1)通过keyset遍历:

for (String key : map.keySet()) {
    System.out.println("key= "+ key + " and value= " + map.get(key));
}

(2)通过entrySet和迭代器遍历:

Iterator<Map.Entry<String, Integer>> it = map.entrySet().iterator();
    while (it.hasNext()) {
        Map.Entry<String, Integer> entry = it.next();
        System.out.println("key= " + entry.getKey() + " and value= " + entry.getValue());
    }

(3)通过entrySet和增强for循环遍历:

for (Map.Entry<String, Integer> entry : map.entrySet()) {
    System.out.println("key= " + entry.getKey() + " and value= " + entry.getValue());
}

(二)TreeMap

        TreeMap是Map接口的实现类,它存储的元素是键值对映射,其key值不允许为null,在添加、删除元素上,TreeMap要比HashMap性能差。

        TreeMap既是无序的,又是有序的。无序是指存储元素顺序和输出顺序不同,有序指的是TreeMap会默认对元素的键进行自然排序。

1.TreeMap集合的创建:

 Map<String, Integer> map = new TreeMap<>();

将有两个符号的字符串切割并分别存入TreeMap的key和value中:

String a = sc.next();
String[] b = a.split(",|:");//|用于隔开两符号,表示字符串按这两个符号切割
for(int i = 0;i<b.length;i+=2){
    map.put(b[i],b[i+1]);
}

2.TreeMap常见方法:

TreeMap集合增删改查的相关方法和HashMap是一样的,另外,还有以下特有方法:

方法名方法说明
ceilingEntry(key)方法返回集合中大于或等于且最接近给定 key 值的元素,如果不存在这样的键值对,则返回 null
ceilingKey(key)返回集合中大于或等于且最接近给定 key 值的键值
descendingKeySet()逆序返回集合的全部 Key
firstEntry()返回集合中最小 Key 的元素
floorEntry(key)返回集合中小于或等于且最接近给定 key 值的元素,如果不存在这样的键值对,则返回 null
headMap(key)返回所有小于给定 key 的元素
higherEntry(key)返回所有大于给定 key 的元素
lastEntry()返回 key 最大的元素
pollFirstEntry()删除集合中最小 Key 的元素
  • 17
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值