List和Map

12 篇文章 0 订阅
9 篇文章 0 订阅

List和Map的学习使用

1.前言

List和Map是Java集合框架中最为常用的,使用场景颇多,相比于数组的最明显优点就是可以对一组数据进行动态的增减。有没有像我一样底子不太好的码友,是不是对于它们的使用始终疑惑头疼着,每一次想使用都是去找网上别人的来对照,然后还是会出错。这一篇文章就是我后面进行探讨学习后的随笔~

2.认识Java集合框架

集合框架是一个用来代表和操纵集合的统一架构。所有的集合框架都包含如下内容:

  • **接口:**是代表集合的抽象数据类型。例如 Collection、List、Set、Map 等。
  • **实现类:**是集合接口的具体实现。例如:ArrayList、LinkedList、HashSet、HashMap。
  • **算法:**是实现集合接口的对象里的方法执行的一些有用的计算,例如:搜索和排序。

Java 集合框架主要包括两种类型的容器:一种是集合(Collection),存储一个元素集合;另一种是图(Map),存储键/值对映射。List就是继承Collection容器的接口,而Map本身就是一种容器,这个就是它们两个最本质的不同点,存储结构不同

**注意:**List是一个允许重复项的有序集合;而Map存储的数据是无序的,Key值不能重复,value值可以重复,key和value是一一对应的。

如果想更清楚了解Java集合框架的知识,可以看一下菜鸟编程这篇文章。

3.ArrayList 和 HashMap

学习List和Map无非就是想学习使用ArrayList和HashMap的使用,它们都是对应接口的一个实现类。

3.1、两者的遍历方式

以foreach为例

遍历 ArrayList

public class Test {
    public static void main(String[] args) {
        List<String> list = new ArrayList<String>();
        //添加元素
        list.add("张三");
        list.add("李四");
        list.add("王五");
        silisttes.add("赵六");
        for (String name : list) {
            System.out.println(name);
        }
    }
}

遍历HashMap

public class Test {
    public static void main(String[] args) {
        Map<Integer, String> map = new HashMap<Integer, String>();
        // 添加键值对
        Sites.put(1, "张三");
        Sites.put(2, "李四");
        Sites.put(3, "王五");
        Sites.put(4, "赵六");
        // 输出 key 和 value
        for (Integer i : map.keySet()) {
            System.out.println("key: " + i + " value: " + map.get(i));
        }
        // 返回所有 value 值
        for(String value: map.values()) {
          System.out.println(value);
        }
    }
}

3.2、两者的隐藏内在关系

HashMap存储的键值对里面的值也可以为一个集合,即可以把ArrayList嵌套在HashMap泛型里面(Map<Integer, List>)。用途在哪里呢?例如用于集合分类、遍历一个数据量特别大的List集合时,运行会特别的慢,就可以使用Map把List里面的元素分类,把带有相同标志的元素存储在同一个键key下,这样遍历起来速度就会快好几倍(非常好用的一个解决运行速度慢的办法)。

下面举一个从csv文件里面读取到数据,然后进行分类的一个例子:

List<CSVRecord> records = parser.getRecords();//这个就是从csv文件里面读取数据,返回一个CSVRecord类型结果集records
Map<String,List<CSVRecord>> map = new HashMap<String, List<CSVRecord>>();
for (CSVRecord record : records) {//遍历结果集records,里面的一个元素就是一个Object对象(即对应一条数据)
    String account = record.get(1);//从Object中获取一个元素作为要分类的键key
    if (!map.containsKey(account)) {//map容器里面没有这个键key,所以就添加进去
        List<CSVRecord> list = new ArrayList<CSVRecord>();
        map.put(account, list);
    }
    map.get(account).add(record);//这个是往对应键里面增加元素
}

3.3、参数问题

集合方法都是泛型方法,即带有尖括号“<>”,所以里面的参数必须是引用类型参数,不可以是基本类型参数(像int、double、char这种)。

引用类型和基本类型的区别

  • 基本类型的变量保存原始值,即它代表的值就是数值本身;

  • 引用类型的变量保存引用值,"引用值"指向内存空间的地址, 对象本身存放在这个引用值所表示的地址的位置。

八大基本类型对应的引用类型如下表:

基本类型引用类型
byteByte
shortShort
intInteger
longLong
floatFloat
doubleDouble
charCharacter
booleanBoolean

!String的引用类型为本身

关于这个两者的区别知识,如果想理解得更深的话,就可以往C语言里面的引用传递和值传递探讨学习一下(java就是借鉴了C语言的这个知识的)。


  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java中的ListMap是两种常用的数据结构,用于存储和操作数据。 1. List(列表)是一个有序的集合,可以存储重复的元素。常见的List实现类有ArrayList和LinkedList。下面是一个使用ArrayList的例子: ```java import java.util.ArrayList; import java.util.List; public class ListExample { public static void main(String[] args) { List<String> list = new ArrayList<>(); list.add("apple"); list.add("banana"); list.add("orange"); System.out.println("List elements: " + list); // 输出:[apple, banana, orange] System.out.println("List size: " + list.size()); // 输出:3 System.out.println("Element at index 1: " + list.get(1)); // 输出:banana list.remove("banana"); System.out.println("List after removing banana: " + list); // 输出:[apple, orange] } } ``` 2. Map(映射)是一种键值对的集合,每个键都是唯一的。常见的Map实现类有HashMap、HashTable、TreeMap和LinkedHashMap。下面是一个使用HashMap的例子: ```java import java.util.HashMap; import java.util.Map; public class MapExample { public static void main(String[] args) { Map<String, Integer> map = new HashMap<>(); map.put("apple", 1); map.put("banana", 2); map.put("orange", 3); System.out.println("Map elements: " + map); // 输出:{apple=1, banana=2, orange=3} System.out.println("Map size: " + map.size()); // 输出:3 System.out.println("Value for key 'banana': " + map.get("banana")); // 输出:2 map.remove("banana"); System.out.println("Map after removing key 'banana': " + map); // 输出:{apple=1, orange=3} } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值