Java集合类系列4--List,Set和Map

List集合
List集合我们知道它允许数据元素可以重复,它是一个元素有序,可以重复的集合,另外一点,List集合中的每个元素都有相对应的索引,所以我们可以通过索引来访问指定位置上的元素,跟数组类似,集合中第一个元素的索引从0开始

在刚开始学习集合的时候,一下子看到那么多名词会感到无从下手,就拿这个List来说吧,当你准备开始学习这部分知识的时候,你可能会上网查资料,可能会看视频教程,你会发现有List,ArrayList,Vector,ListIterator等,初看这些你一点是不明白的,在我看来,初学者,学习这块的时候首先对List有个大致了解,然后掌握基本常用方法就行了,我们在使用List的时候,最常用的就是ArrayList,所以今天对List的讲解我们也还主要讲ArrayList。

ArrayList是List的一个实现类,我们在使用List的时候在代码中一般这样使用: List<> list = new ArrayList<>();
这是我们在代码中长用的格式,ArrayList是基于数组实现的List类,我们使用集合就避免不了遍历集合,因为我们始终是要使用集合中的元素的,我们之前讲过遍历集合的集中常用方法,现在单独对于List俩说也是使用的,大概有如下三种遍历List集合的方法:
第一:使用迭代器遍历,就是我们之前说过的Iterator。
具体使用代码示例:
public class ListTest {
public static void main(String[] args) {
//创建list对象
List<String> list = new ArrayList<String>();
//添加数据
list.add("张三");
list.add("李四");
list.add("王二");
list.add("麻子");
Iterator<String> iterator = list.iterator();
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
}
第二:使用for循环遍历,就是之前说的foreach
示例代码:
public static void main(String[] args) {
//创建list对象
List<String> list = new ArrayList<String>();
//添加数据
list.add("张三");
list.add("李四");
list.add("王二");
list.add("麻子");
for(String name: list){
System.out.println(name);
};
}

第三:随机访问,通过索引值去遍历
public static void main(String[] args) {
//创建list对象
List<String> list = new ArrayList<String>();
//添加数据
list.add("张三");
list.add("李四");
list.add("王二");
list.add("麻子");
int size = list.size();
for(int i = 0;i<size;i++){
System.out.println(list.get(i));
};

}
以上就是遍历List集合的三种常用方法,那么你可能会有疑问,这三种方法用哪一种比较好呢?我觉得你可以试试,刚开始选一种自己好理解的进行练习,不过我可以告诉你使用随机访问的方法性能更好,速度更快。



Set集合
Set集合我们在之前进行过基本介绍,形象来说,Set集合就像一个箱子,我们可以把一些东西丢进去,当然这里的东西应该指的是数据,我们还说过,set集合是无序的,这点也好理解,你往箱子里随便丢东西,你能记住东西的各个位置吗?显然不能。这些是set集合的一些基本知识,我们前面也看过一些代码,比如我们创建一个set集合Set<String> set = new HashSet<>(); 我们发现在创建集合对象的时候我们不能直接创建集合对象,要创建他的实现类,Set我们将要学习它的三个实现类HashSet,TreeSet和EnumSet,关于set的一些基本属性,毋庸置疑就是这三个实现类!而作为初学者,你应该掌握HashSet和TreeSet,尤其HashSet。
HashSet
hashset是一个没有重复元素的集合,它有一个特点是它的访问速度很快,之所以访问速度快全是因为hashcode,当我们向HashSet集合中存入一个数据的时候,HashSet会调用该对象的hashCode方法得到该对象的hashcode值,然后根据hashcode值来决定该对象在HashSet中的位置。我们知道Set集合中存放的数据无序的,这也就导致我们表面上看,Set中的集合其实是没有索引的,但是在HashSet中,当程序向HashSet中添加数据时,HashSet会根据对象的hashcode值来存储该对象,同时也能够根据hashcode值来快速定位到该元素,这也是HashSet访问速度很快的重要原因。

说了那么多,我们来看看怎么用的吧!
//创建HashSet对象
Set<String> set = new HashSet<String>();
//添加数据
set.add("a");
set.add("b");
set.add("c");
我们可以发现,集合的创建一般都相同,而添加数据这块,List和Set集合都是使用add来添加,接下来要将的Map集合因为存放的数据含有映射关系,所以它的添加数据的方法使用put。
我们再来看看看Set集合的遍历方式。因为set存放的数据是无需的,所以相比较List而言不能使用随机访问的方式,而通过Iterator和for循环还是一样的,我们来具体看看
第一:通过Iterator遍历
public static void main(String[] args)
{
//创建HashSet对象
Set<String> set = new HashSet<String>();
//添加数据
set.add("a");
set.add("b");
set.add("c");
Iterator<String> iterator = set.iterator();
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
我们发现和List使用Iterator的方式是一模一样的
第二:使用for循环访问
public static void main(String[] args)
{
//创建HashSet对象
Set<String> set = new HashSet<String>();
//添加数据
set.add("a");
set.add("b");
set.add("c");
for(String name: set){
System.out.println(name);
};
}
我们发现这个跟list的好像也是一模一样的,的确,不过对于Set使用for循环遍历我们需要注意,在有些情况中,我们需要先将集合转换成数组才能进行for遍历,所以这种方法不推荐。
遍历Set集合,就使用迭代器。




Map集合
Map集合是Java8中新增的集合,这个集合也是区分数组与集合的重要区别我觉得,数组也是用来存放数据的,那为什么还要使用集合呢?集合相比较数组的一大特点就是集合可以存放含有映射关系的数据,说白点就是集合可以存放哪些一一对应的数据,比如说一个学号对应一个血学生,这就要靠Map集合来实现了。
Map集合用来保存具有映射关系的数据,它区别与list和set的一个地方在添加数据数据这块,它使用put来添加数据,形式为put(key,value),这也表明Map存放的是两个值,一个key一个value,这两者是一一对应的。即通过指定的key,总能找到唯一的,确定的value。
就像学习Set我们学习HashSet一样,对于Map,我们首先要学习的就是HashMap,对于Map可以拿出一个专题讲解,今天我们先来看HashMap。
public static void main(String[] args)
{
//创建HashMap
Map<String, String> map = new HashMap<>();
//添加数据
map.put("a", "张三");
map.put("b", "李四");
map.put("c", "王二");

}
这是最基本的关于map集合的创建以及添加数据。对于map集合的遍历就没有list和set那么简单了,还有很多关于 map的api,我们将在下个关于map的专题进行讲解,今天就到这里。
原文地址:https://www.cnblogs.com/ithuangqing/p/12113694.html