Java中的List、Map、Set的用法

目录

List接口

增加

查找

修改

删除

遍历

Set接口

注意

Map接口

添加/修改

查找

删除

 遍历


List接口

List接口(线性表接口):ArrayList(动态数组--要保存的元素个数不确定),LinkedList(链表)

增加

add(任意数据类型 新的值)add(int index,任意数据类型):在索引为index的位置上插入新元素,默认在集合尾部增加

查找

get(int index);返回index位置的元素值,

boolean contains(val):判断List中是否包含指定值

修改

set(int index ,newVal):修改index位置的元素,返回修改之前的元素值

删除

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

remove(val):删除指定元素,默认删除出现的第一个元素

集合类中如果用到基本数据类型,必须使用包装类

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

/**
 * @author happy
 */
public class ListTest {
    public static void main(String[] args) {
       int[] data = {1,2,3,4,5,7};
       List<Integer> list = new ArrayList<>();
        for (int i:data) {
            list.add(i);
        }
        System.out.println(list.contains(10));
        System.out.println(list.get(3));
        list.remove(1);
        System.out.println(list);
        int index = list.indexOf(7);
        list.remove(index);
        System.out.println(list);

//输出
false
4
[1, 3, 4, 5, 7]
[1, 3, 4, 5]
    }
}

遍历

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

/**
 * @author happy
 */
public class ListTest {
    public static void main(String[] args) {
       int[] data = {1,2,3,4,5,7};
       List<Integer> list = new ArrayList<>();
        for (int i:data) {
            list.add(i);
        }
        //[1, 2, 3, 4, 5, 7]打印这个数组
        System.out.println(list);
        for (int temp:list) {
            //1 2 3 4 5 7 分开打印每个元素
            System.out.print(temp+" ");
        }
    }
}

Set接口

Set接口:一次存储一个不重复元素

  • 元素的添加顺序和插入顺序没有太大关系(HastSet类)
  • Set接口是List接口的子接口,只是元素插入有了不重复的限制,其他用法和List接口差不多,需要注意的是Set没有修改方法

注意

  • 当向Set中添加了一个不重复的元素,返回true,如果Set已经有了需要添加的元素 ,不能再次添加,返回false
import java.util.HashSet;
import java.util.Set;

/**
 * @author happy
 */
public class SetTest {
    public static void main(String[] args) {
        int[] data = {1,2,2,3,4,6,7,7,8};
        Set<Integer> set = new HashSet<>();
        for (int i:data) {
            set.add(i);
        }
        if (set.add(2)){
            System.out.println("添加成功");
        }else {
            System.out.println("该元素已经存在");
        }
        System.out.println(set);
    }
}

//输出
该元素已经存在
[1, 2, 3, 4, 6, 7, 8]
  •  使用HastSet时,元素的插入顺序和时间存储数据无关
import java.util.HashSet;
import java.util.Set;

/**
 * @author happy
 */
public class SetTest {
    public static void main(String[] args) {
        String[] str = {"孙悟空","猪八戒","C"};
        Set<String> set = new HashSet<>();
        for (String s:str) {
            set.add(s);
        }
        //[C, 孙悟空, 猪八戒]
        System.out.println(set);
    }
}
  •  如果想要插入顺序和存储顺序一致,使用LinkedHashSet
import java.util.LinkedHashSet;
import java.util.Set;

/**
 * @author happy
 */
public class SetTest {
    public static void main(String[] args) {
        String[] str = {"孙悟空","猪八戒","C"};
        Set<String> set = new LinkedHashSet<>();
        for (String s:str) {
            set.add(s);
        }
        //[孙悟空, 猪八戒, C]
        System.out.println(set);
    }
}
  •  set.contains();方法,可以查找元素
import java.util.HashSet;
import java.util.Set;

/**
 * @author happy
 */
public class SetTest {
    public static void main(String[] args) {
        String[] str = {"孙悟空","猪八戒","C"};
        Set<String> set = new HashSet<>();
        for (String s:str) {
            set.add(s);
        }
        //false
        System.out.println(set.contains("D"));
    }
}

Map接口

Map接口:Map接口是一个映射的关系,一次存储两个元素 key = val(键值对应元素),key不重复,val可能重复,通过key值查找元素

添加/修改

put(key,val):将key和对应的val存储到Map中,如果key值存在,就修改val,如果key不存在,就添加val

import java.util.HashMap;
import java.util.Map;

/**
 * @author happy
 */
public class MapTest {
    public static void main(String[] args) {
        Map<Integer,String> map = new HashMap<>();
        map.put(1,"小张");
        map.put(2,"小明");
        map.put(3,"小王");
        map.put(1,"小花");

        //{1=小花, 2=小明, 3=小王}
        System.out.println(map);
    }
}

查找

  • 根据指定的key查找val,如果不存在,返回null

        String ret = map.get(1);

        //小花
        System.out.println(ret);
  • 根据key取出映射的val,如果不存在,返回默认值
       map.getOrDefault(2,"空");

  • 判断当前Map中是否包含指定的key
        //true
        System.out.println(map.containsKey(2));
  • 判断当前Map中是否包含指定的val
        //false
        System.out.println(map.containsValue("小李"));

删除

  • 根据key删除,会删掉key和val
         map.remove(1);
        // {2=小明, 3=小王}
        System.out.println(map);
  • 删除key所在的键值对,返回删除前key对应的val值,如果不存在,返回null
        //null
        System.out.println(map.remove(10));

 遍历

  • 获取Map中的key集合

Map中key是唯一的,返回Set集合

  • 获取Map中的val集合

Map中val是可以重复的,返回Collection(List的父接口)

  • 如果需要依次取出Map中一个一个的键值对,需要将Map集合转换为Set集合再进行遍历

Map.Entry:这个接口存储的就是键值对(认为key=val是一个对象,将key和val捆绑在一起) 

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

/**
 * @author happy
 */
public class MapTest {
    public static void main(String[] args) {
        Map<Integer,String> map = new HashMap<>();
        map.put(1,"小张");
        map.put(2,"小明");
        map.put(3,"小王");
        map.put(1,"小花");
        Set<Map.Entry<Integer,String>> entry = map.entrySet();
        for (Map.Entry<Integer,String> temp:entry) {
            System.out.println(temp.getKey() +"="+ temp.getValue());
        }
    }
}

//输出
1=小花
2=小明
3=小王

 

  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: Java ListSetMap 是集合框架最常用的三种数据结构。它们都是用来存储和操作一组对象的数据结构,但它们之间有一些不同之处。 1. List List 是有序的集合,它可以包含重复的元素。List 可以使用下标来访问它的元素,并且允许插入、删除和修改元素。常用的 List 实现类有 ArrayList 和 LinkedList。ArrayList 是基于数组实现的,适合随机访问和修改元素。LinkedList 则是基于链表实现的,适合插入和删除元素。 2. Set Set 是不允许重复元素的集合,它没有顺序概念。Set 可以用来判断一个元素是否存在于集合,还可以进行交、并、差等操作。常用的 Set 实现类有 HashSet 和 TreeSet。HashSet 是基于哈希表实现的,适合插入和查找元素。TreeSet 则是基于红黑树实现的,适合排序和范围查找。 3. Map Map 是一种键值对的映射表,它可以用键来访问值,键是唯一的,但值可以重复。Map 可以用来存储配置信息、数据缓存等。常用的 Map 实现类有 HashMap 和 TreeMap。HashMap 是基于哈希表实现的,适合快速查找和修改。TreeMap 则是基于红黑树实现的,适合排序和范围查找。 总之,ListSetMap 都是 Java 集合框架非常重要的部分,每种集合类都有自己的特点和用途,开发者可以根据自己的需求选择适当的集合类。 ### 回答2: Java的集合是一种用于存储和操作数据的对象容器。在Java,有三种常用的集合类型:List(列表)、Set(集合)和Map(映射)。 List是有序的,可以存储重复的元素。它的特点是可以按照元素的索引进行访问,也可以根据元素的值进行查找和删除。常用的List实现类有ArrayList和LinkedList。ArrayList使用动态数组实现,适用于随机访问和遍历操作,而LinkedList使用双向链表实现,适用于频繁的插入和删除操作。 Set是无序的,不可以存储重复的元素。它的特点是元素不可重复,且没有固定的顺序。常用的Set实现类有HashSet和TreeSet。HashSet使用哈希表实现,适用于快速的插入和查找操作,而TreeSet使用红黑树实现,可以按照元素的自然顺序进行遍历。 Map是一种键值对的映射结构,存储着键值对的集合。Map不允许重复的键,但允许不同的键对应相同的值。Map的特点是可以通过键快速的查找对应的值。常用的Map实现类有HashMap和TreeMap。HashMap使用哈希表实现,适用于快速的查找和插入操作,而TreeMap使用红黑树实现,可以按照键的自然顺序遍历键值对。 总结来说,List是有序的、可重复的集合;Set是无序的、不可重复的集合;Map是键值对的映射结构。根据不同的需求,选择适合的集合类型可以提高代码的效率和可读性。 ### 回答3: JavaListSetMap是三种常用的集合类型,它们具有以下特点: 1. List(列表)是有序的集合,可以存储重复的元素。它可以根据元素的索引位置进行访问,支持通过索引添加、删除和修改元素。常见的List实现类有ArrayList和LinkedList。 2. Set(集)是无序的集合,不可以存储重复的元素。它使用哈希表或树结构来存储元素,具有快速查找的特点。常见的Set实现类有HashSet和TreeSet。 3. Map(映射)是一种以键值对形式存储数据的集合。每个键都是唯一的,值可以重复。通过键可以快速查找对应的值。常见的Map实现类有HashMap和TreeMapListSet都是继承自Collection接口,而Map是独立的集合类型。它们都提供了丰富的方法来处理集合的元素。 ListSet都可以通过Iterator遍历元素,但是List还可以通过索引访问元素。List还可以存储重复的元素,而Set则只能存储唯一的元素。 Map通过键值对来存储和访问元素,可以使用键快速查找对应的值。通过keySet()方法可以获取所有的键,通过values()方法可以获取所有的值。 ListSetMap都是线程不安全的,如果在多线程环境下使用,需要注意线程安全性。可以通过Collections类的synchronizedList、synchronizedSet和synchronizedMap方法将它们转换为线程安全的集合。 总的来说,List适用于需要重复元素并且需要按照顺序访问的场景,Set适用于需要唯一元素的场景,Map适用于需要通过键值对进行存储和访问的场景。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

学习java的张三

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值