java 容器教程_java基础教程-容器(三)

本文深入讲解Java集合框架的核心概念,包括List、Set、Map的主要特点与应用场景,以及如何利用增强for循环、Iterator进行元素遍历。同时介绍了泛型的使用方法,以及不同集合间的转换技巧。

三、容器(图很重要)存储多个数据,想存多少存多少

3.1 简介

8edb25c173ef53ae3c983e8184792e4e.png

左边是一个一个往里装,右边map是一对一对往里装。collection接口是set和list接口的父类,set没有顺序,不可以重复;list有顺序,可以重复(可以equals)。Map定义了“键(key)-值(value)”存储,成对存储。

Collection类中,在调用remove、contains方法时,需要比较对象是否相等,这会涉及到object类中的equals方法和hashcode方法,对于自定义的类型,需要重写equals和hashcode方法以实现自定义对象的相等规则。例:

b728ede394378e24fbdb639c209e736d.png

必学的六个接口:collection、set、list、map、iterator(遍历元素),comparable

3.2增强的for循环(JDK1.5以后)

缺点:

数组:不能方便的访问下标;

集合:与iterator相比,不能方便的删除集合中的内容。所以除了简单的遍历读数据外,一般不用。

import java.util.*;

public class EnhancedFor {

public static void main(String[] args) {

int[] arr = {1, 2, 3, 4, 5};

for(int i : arr) {

System.out.println(i);

}

Collection c = new ArrayList();

c.add(new String("aaa"));

c.add(new String("bbb"));

c.add(new String("ccc"));

for(Object o : c) {

System.out.println(o);

}

}

}

3.3Iterator接口(遍历一个collection的方式)

含有hasNext(),next(),remove()方法

60b09d561c58621d9cb9d112849cbd5b.png

3.4 Set接口

Set接口是collection的子接口,实现set的容器类中的元素没有顺序,而且不可能重复。Set类中有HashSet()和TreeSet()等

aa8e2eb7b177a31f5398b94db595dd6a.png

sn.retainAll(s1)//sn与s1求交集

3.5 List接口

List接口也是collection的子接口,list接口的容器类中的元素是有顺序的,而且可以重复。arrayList(),linkedList()

Object set(int index,object element)//object返回值为以前的对象

d5493221632b8bc67d0054b82d48087b.png

230d7a4b3ea3d8aed4345a13cba3ddf4.png

4574fc9dea8c267e5611dc2f8d9981dc.png

240fca948cf7dcb98bdfa806dde5110f.png

3.6 comparable

import java.lang.cmparable  里面只有一个方法 public int compareTo(object obj)

279c92cdf2343119bdb79a8914b16691.png

3.7 Map接口

实现Map接口的类用来存储键-值对,键是用来做索引的,所以不能重复(指相互间间equals,因为equals效率较低,所以用hashcode比较,所以重写equals必须重写hashcode)

a30ddfadb2bb362c682fe29f2e76139e.png

Map接口(JDK1.5之后满足下面的方法),本来map的方法必须是针对对象的,对于数据必须转换成对象,现在可以直接用1,这是因为JDK1.5支持自动将基础类型转换成对象(打包)和自动将对象转换成基础类型(解包)过程

3.8 泛型

List c = new ArrayList();//只能装string类型(在API文档中,只要后面跟着的都可以跟<>,这就叫泛型)

Map m1 = new HashMap();//Map里面装了一对东西,所以使用两个类型。

碰到集合时尽量用泛型,增强程序的可读性,即在定义集合时,定义集合中对象的类型。

3.9 List、Set、Map、数组之间的转换

3.9.1 List和Set转换

1、List->Set

Set set = new HashSet(new ArrayList())

2、Set->List

List list = new ArrayList(new HashSet())

3.9.2 List和数组转换

1、List->数组

List list = Arrays.asList(1,2)

int [] res = (int[])list.toArray(new int[list.size()])

2、数组->List

List list = Arrays.asList(1,2,3,4)

3.9.3 Set和数组转换

1、Set->数组

Set set = new HashSet()

List list = new ArrayList(set)

int [] res = (int[])list.toArray(new int[list.size()])

2、数组->Set

Set set = new HashSet(Arrays.asList(1,2,3,4)) //通过List过渡

3.9.4 Map的相关操作

Map map = new HashMap();

map.put("1", "a");

map.put('2', 'b');

map.put('3', 'c');

System.out.println(map.keySet()); // 输出所有的key值

System.out.println(map.values()); // 输出所有的value

List list = new ArrayList(map.values()); // 将map的值转化为List

Set set = new HashSet(map.values()); // 将map的值转化为Set

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值