JavaSE 13(集合[List、Map])

一、集合存储结构

Java集合按照其存储结构可以分为两大类,即单列集合Collection双列集合Map

Collection是单列集合类的根接口,其有两个重要子接口 List 和Set。
(1)List接口的主要类有 ArrayList 和 LinkedList。
(2)Set接口的主要类有 HashSet和TreeSet。
(3)Map接口的主要实现类有HashMap 和 TreeMap
注意:
ArrayList实现了长度可变的数组,在内存中分配连续的空间。遍历元素和随机访问元素的效率比较高。
LinkedList采用链表存储方式。插入、删除元素时效率比较高。

各接口的特点:
(1)List 接口存储一组不唯一,有序(插入顺序)的对象
(2)Set 接口存储一组唯一,无序的对象
(3)Map接口存储一组键值对象,提供key到value的映射

二、List

List集合代表一个有序集合,集合中每个元素都有其对应的顺序索引。List集合允许使用重复元素,可以通过索引来访问指定位置的集合元素。
ArrayList实现了长度可变的数组,在内存中分配连续的空间。遍历元素和随机访问元素的效率比较高。
LinkedList采用链表存储方式。插入、删除元素时效率比较高。

1、 ArrayList

使用ArrayList存储元素:

//创建四个狗狗对象	...
List dogs = new ArrayList();
 dogs.add(ououDog);
 dogs.add(yayaDog);
dogs.add(meimeiDog);
dogs.add(2, feifeiDog);           // 添加feifeiDog到指定位置		
System.out.println("共计有" + dogs.size() + "条狗狗。");
System.out.println("分别是:");
for (int i = 0; i < dogs.size(); i++) {
	Dog dog = (Dog) dogs.get(i);
	… …
}

使用ArrayList移除、判断元素:

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

/**
 * 测试ArryList的remove()、contains()方法
*/
public class Test2 {
    public static void main(String[] args) {
    // 1、创建多个狗狗对象
    Dog ououDog = new Dog("欧欧", "雪娜瑞");
    Dog yayaDog = new Dog("亚亚", "拉布拉多");
    Dog meimeiDog = new Dog("美美", "雪娜瑞");
    Dog feifeiDog = new Dog("菲菲", "拉布拉多");
    // 2、创建ArrayList集合对象并把多个狗狗对象放入其中
    List dogs = new ArrayList();
    dogs.add(ououDog);
    dogs.add(yayaDog);
    dogs.add(meimeiDog);
    dogs.add(2, feifeiDog); 
    // 3、输出删除前集合中狗狗的数量
    System.out.println("删除之前共计有" + dogs.size() + "条狗狗。");
    // 4、删除集合中第一个狗狗和feifeiDog狗狗
           dogs.remove(0);
           dogs.remove(feifeiDog);
    // 5、显示删除后集合中各条狗狗信息
    System.out.println("\n删除之后还有" + dogs.size() + "条狗狗。");
    System.out.println("分别是:");
    for (int i = 0; i < dogs.size(); i++) {
        Dog dog = (Dog) dogs.get(i);
        System.out.println(dog.getName() + "\t" + dog.getStrain());
    }
    //6、判断集合中是否包含指定狗狗信息
           if(dogs.contains(meimeiDog))
        System.out.println("\n集合中包含美美的信息");
    else
        System.out.println("\n集合中不包含美美的信息");
    }
}

List接口常用方法:
在这里插入图片描述

2、LinkedList

使用LinkedList存储元素:

// 创建多个狗狗对象...
LinkedList dogs = new LinkedList();
 dogs.add(ououDog);
 dogs.add(yayaDog);
 dogs.addLast(meimeiDog);
 dogs.addFirst(feifeiDog);
		
 Dog dogFirst= (Dog)dogs.getFirst();//获取集合第一条信息
 System.out.println("第一条狗狗昵称是"+dogFirst.getName() );
		
 Dog dogLast= (Dog)dogs.getLast();//获取集合最后一条信息
 System.out.println("最后一条狗狗昵称是"+dogLast.getName());
				
 dogs.removeFirst();//删除集合第一条信息
 dogs.removeLast();	//删除集合最后一条信息

LinkedList的特殊方法:
在这里插入图片描述

三、Map

Map接口专门处理键值映射数据的存储,可以根据键实现对值的操作,最常用的实现类是HashMap。
使用HashMap存储数据:

Map countries = new HashMap();
countries.put("CN", "中华人民共和国");
 countries.put("RU", "俄罗斯联邦");
 countries.put("FR", "法兰西共和国");
 countries.put("US", "美利坚合众国");
	
 String country = (String) countries.get("CN");//获取指定元素的值
 //… …
	
System.out.println("Map中共有"+countries.size() +"组数据");//获取元素个数
	
 countries.remove("FR");//删除指定元素
 System.out.println("Map中包含FR的key吗?" + 
			countries.containsKey("FR"));
	
 System.out.println( countries.keySet() ) ;//显示键集
 System.out.println( countries.values() );//显示值集
 System.out.println( countries );//显示键值对集

Map接口常用方法:
在这里插入图片描述

Hashtable和HashMap的异同:
实现原理、功能相同,可以互用。
主要区别:
Hashtable继承Dictionary类,HashMap实现Map接口
Hashtable线程安全,HashMap线程非安全
Hashtable不允许null值,HashMap允许null值

注意:开发过程中,最好使用ArrayList和HashMap。

四、简单示例

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;


public class Strings {
	public static void main(String[] args) {
		List<Integer> list1=new ArrayList<Integer>();
		list1.add(15);
		list1.add(676);
		list1.add(9000000);
		System.out.println(list1);
		
		
		List<Map<String, Integer>> list=new ArrayList<Map<String,Integer>>();
		
		Map<String, Integer> map=new HashMap<String,Integer>();
		map.put("张三",100);
		map.put("小二",90);
		
		Map<String, Integer> map2=new HashMap<String,Integer>();
		map2.put("王五",98);
		map2.put("赵柳",80);
		
		//Map<String, String> map3=new HashMap<String,String>();
		
		list.add(map);
		list.add(map2);
		//list.add(map3);
		System.out.println(list);
	}
}

运行结果:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值