Java集合总结(List、Map、Set)
集合的引入
当我们有种需求,需要存储多个元素的结构时,我们前面讲过数组,数组可以存储。但是数组也有它的弊端,使用的时候,必须先定义好长度,也就是数组的长度是固定,不能根据我们的需求自动变长或者变短。
我们看一个实例:先定义一个Student类:
public class Student {
private String name;
private Integer age;
public Student() {
super();
// TODO Auto-generated constructor stub
}
public Student(String name, Integer age) {
super();
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
}
然后我们需要存储三个学生信息:我们给下测试类:
public class Test {
public static void main(String[] args) {
Student students[]=new Student[3];
students[0]=new Student("张三",1);
students[1]=new Student("李四",2);
students[2]=new Student("王五",3);
}
}
这里我们很好的实现了用数组结构存储了三个学生,但是,假如我们需要再存储一个学生,就懵逼了,因为长度固定了。所以就引入了可变化长度的集合。
一、List集合
Collection接口是集合的老祖宗,定义了接口的基本方法,我们查看api 文档:

List是Collection接口的子接口,也是最常用的接口,此接口对Collection接口进行了大量的扩展,List集合里的元素是可以重复的。
List接口的主要实现类有ArrayList,和LinkedList。在数据量不大的情况下,这两个类性能差别不大,一般情况下,集合里的元素很少变化的,一般用ArrayList,假如集合里元素经常变动,要用LinkedList;底层实现有差别的。我们给下实例:
import java.util.ArrayList;
public class TestArrayLit {
private static void pringArrayList(ArrayList<String> arrayList){
System.out.println("当前的集合元素:");
for(int i=0;i<arrayList.size();i++){
System.out.println(arrayList.get(i));
}
}
public static void main(String[] args) {
ArrayList<String> arrayList=new ArrayList<String>();
// 添加元素
arrayList.add("张三");
arrayList.add("李四");
pringArrayList(arrayList);
// 在指定位置插入元素
arrayList.add(1, "小张三");
pringArrayList(arrayList);
// 元素的替换
arrayList.set(2, "小李四");
pringArrayList(arrayList);
// 移除元素
arrayList.remove(0);
pringArrayList(arrayList);
}
}
运行输出:
当前的集合元素:
张三
李四
当前的集合元素:
张三
小张三
李四
当前的集合元素:
张三
小张三
小李四
当前的集合元素:
小张三
小李四
import java.util.LinkedList;
public class TestLinkedList {
private static void pringLinkedList(LinkedList<String> linkedList){
System.out.println("当前元素的集合:");
for(int i=0;i<linkedList.size();i++){
System.out.print(linkedList.get(i)+" ");
}
System.out.println();
}
public static void main(String[] args) {
LinkedList<String> linkedList=new LinkedList<String>();
linkedList.add("张三");
linkedList.add("李四");
linkedList.add("王五");
linkedList.add("李四");
linkedList.add("赵六");
pringLinkedList(linkedList);
// indexOf 寻找位置
System.out.println(linkedList.indexOf("李四"));
pringLinkedList(linkedList);
// peekFirst 获取第一个元素
System.out.println(linkedList.peekFirst());
pringLinkedList(linkedList);
// peekLast 获取最后一个元素
System.out.println(linkedList.peekLast());
pringLinkedList(linkedList);
// pollFirst 摘取第一个元素
System.out.println(linkedList.pollFirst());
pringLinkedList(linkedList);
// pollLast 榨取最后一个元素
System.out.println(linkedList.pollLast());
pringLinkedList(linkedList);
}
}
运行输出:
当前元素的集合:
张三 李四 王五 李四 赵六
1
当前元素的集合:
张三 李四 王五 李四 赵六
张三
当前元素的集合:
张三 李四 王五 李四 赵六
赵六
当前元素的集合:
张三 李四 王五 李四 赵六
张三
当前元素的集合:
李四 王五 李四 赵六
赵六
当前元素的集合:
李四 王五 李四
二、集合的遍历
前面我们讲了最简单的集合遍历用for循环。今天再介绍两个 Iterator和foreach;
首先是Iterator遍历器,我们给下实例:
先给一个Student类:
1 public class Student {
2
3 private String name;
4 private Integer age;
5
6
7
8 public Student() {
9 super();
10 // TODO Auto-generated constructor stub
11 }
12 public Student(String name, Integer age) {
13 super();
14 this.name = name;
15 this.age = age;
16 }
17 public String getName() {
18 return name;
19 }
20 public void setName(String name) {
21 this.name = name;
22 }
23 public Integer getAge() {
24 return age;
25 }
26 public void setAge(Integer age) {
27 this.age = age;
28 }
29
30
31 }
1 import java.util.Iterator;
2 import java.util.LinkedList;
3
4
5 public class TestIterator {
6
7 public static void main(String[] args) {
8 LinkedList<Student> list=new LinkedList<Student>();
9 list.add(new Student("张三",10));
10 list.add(new Student("李四",20));
11 list.add(new Student("王五",30));
12
13 /**
14 * 用Iterator遍历集合
15 */
16 Iterator<Student> it=list.iterator(); // 返回一个迭代器
17 while(it.hasNext()){
18 Student s=it.next(); // 返回迭代的下一个元素。
19 System.out.println("姓名:"+s.getName()+"年龄:"+s.getAge());
20 }
21 }
22 }
运行输出:
姓名:张三年龄:10
姓名:李四年龄:20
姓名:王五年龄:30
foreach遍历:
1 import java.util.LinkedList;
2
3 public class TestForeach {
4
5 public static void main(String[] args) {
6 LinkedList<Student> list=new LinkedList<Student>();
7 list.add(new Student("张三",10));
8 list.add(new Student("李四",20));
9 list.add(new Student("王五",30));
10
11 /**
12 * 用foreach遍历
13 */
14 for(Student s:list){
15 System.out.println("姓名:"+s.getName()+"年龄:"+s.getAge());
16 }
17 }
18 }
运行输出:
姓名:张三年龄:10
姓名:李四年龄:20
姓名:王五年龄:30
三、Map集合
是存放一对值的最大接口,即接口中的每一个元素都是一对,以key->value键值对的形式保存;我们这里讲解下Map的常用实现类HashMap;
我们给下演示代码:
import java.util.HashMap;
import java.util.Iterator; public class TestHashMap { public static void main(String[] args) {
HashMap<String,Student> hashMap=new HashMap<String,Student>();
hashMap.put("1号", new Student("张三",10));
hashMap.put("2号", new Student("李四",20));
hashMap.put("3号", new Student("王五",30)); // 通过key,获取value
Student s=hashMap.get("1号");
System.out.println(s.getName()+":"+s.getAge()); Iterator<String> it=hashMap.keySet().iterator(); // 获取key的集合,再获取迭代器
while(it.hasNext()){
String key=it.next(); // 获取key
Student student=hashMap.get(key); // 通过key获取value
System.out.println("key="+key+" value=["+student.getName()+","+student.getAge()+"]");
}
}
}
运行输出:
张三:10
key=3号 value=[王五,30]
key=2号 value=[李四,20]
key=1号 value=[张三,10]
四、Set集合
Set集合是Collection接口的子接口,没有对Collection接口进行扩展,里面不允许存在重复的内容;
演示代码:
import java.util.HashSet;
import java.util.Iterator; public class TestHashSet { public static void main(String[] args) {
/**
* 1,HashSet是无序
* 2,不循序有重复的值
*/
HashSet<String> hs=new HashSet<String>();
hs.add("21221");
hs.add("112");
hs.add("312");
hs.add("421");
hs.add("312"); /**
* 用Iterator遍历集合
*/
Iterator<String> it=hs.iterator();
while(it.hasNext()){
String s=it.next();
System.out.println(s+" ");
}
}
}
运行输出:
112
421
312
21221
Java集合总结(List、Map、Set)的更多相关文章
- Java集合框架之map
Java集合框架之map. Map的主要实现类有HashMap,LinkedHashMap,TreeMap,等等.具体可参阅API文档. 其中HashMap是无序排序. LinkedHashMap是自 ...
- Java 集合系列 15 Map总结
java 集合系列目录: Java 集合系列 01 总体框架 Java 集合系列 02 Collection架构 Java 集合系列 03 ArrayList详细介绍(源码解析)和使用示例 Java ...
- Java 集合系列 08 Map架构
java 集合系列目录: Java 集合系列 01 总体框架 Java 集合系列 02 Collection架构 Java 集合系列 03 ArrayList详细介绍(源码解析)和使用示例 Java ...
- Java集合框架之Map接口浅析
Java集合框架之Map接口浅析 一.Map接口综述: 1.1java.util.Map<k, v>简介 位于java.util包下的Map接口,是Java集合框架的重要成员,它是和Col ...
- 【JAVA集合框架之Map】
一.概述.1.Map是一种接口,在JAVA集合框架中是以一种非常重要的集合.2.Map一次添加一对元素,所以又称为“双列集合”(Collection一次添加一个元素,所以又称为“单列集合”)3.Map ...
- Java集合框架中Map接口的使用
在我们常用的Java集合框架接口中,除了前面说过的Collection接口以及他的根接口List接口和Set接口的使用,Map接口也是一个经常使用的接口,和Collection接口不同,Map接口并不 ...
- java集合框架07——Map架构与源代码分析
前几节我们对Collection以及Collection中的List部分进行了分析,Collection中还有个Set,因为Set是基于Map实现的,所以这里我们先分析Map,后面章节再继续学习Set ...
- 「 深入浅出 」java集合Collection和Map
本系列文章主要对java集合的框架进行一个深入浅出的介绍,使大家对java集合有个深入的理解. 本篇文章主要具体介绍了Collection接口,Map接口以及Collection接口的三个子接口Set ...
- Java集合 List,Set,Map
一.List:.有顺序以线性方式存储,可以存放重复对象 线程安全方法:List list = Collections.synchronizedList(new LinkedList(...)); ...
- Java集合中的Map接口
jdk1.8.0_144 Map是Java三种集合中的一种位于java.util包中,Map作为一个接口存在定义了这种数据结构的一些基础操作,它的最终实现类有很多:HashMap.TreeMap.So ...
随机推荐
- 将字符串类型转化为date类型
直接上代码 import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; pub ...
- php页面获取数据库中的数据
<!DOCTYPE HTML><html> <head> <meta charset="utf-8" /> ...
- 009-java中常用的单个键值对
1.Java 6提供AbstractMap.SimpleEntry<K,V>和AbstractMap.SimpleImmutableEntry<K,V> Map.Entry&l ...
- PAT Waiting in Line[转载]
//转自:https://blog.csdn.net/apie_czx/article/details/45537627 1014 Waiting in Line (30)(30 分)Suppose ...
- C# winform webbrowser如何指定内核为IE11? 输出 this.webbrowser.Version 显示版本是IE11的,但实际版本不是啊! 网上打的修改注册表HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_BROWSER_EMULA
最佳答案 1)假设你应用程序的名字为MyApplication.exe 2)运行Regedit,打开注册表,找到 HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\M ...
- 使用SQLMAP对网站和数据库进行SQL注入攻击
from:http://www.blackmoreops.com/2014/05/07/use-sqlmap-sql-injection-hack-website-database/ 0x00 背景介 ...
- Xcode 快捷键及代码格式化
按住apple键点击类名就可以定位到这个类中查看相关定义(在日后的开发中我们会经常这么来做,毕竟要记住iOS开发中所有的API是不现实的,有些API我们可以通过这种方法来查找) PS:下面都是网上百度 ...
- VMware Coding Challenge: Removing Duplicates Entries
static LinkedListNode removeDuplicates(LinkedListNode list) { LinkedListNode cur = list; HashSet< ...
- centos迷你版,没有安装ifconfig命令
ifconfig命令是设置或显示网络接口的程序,可以显示出我们机器的网卡信息,可是有些时候最小化安装CentOS等Linux发行版的时候会默认不安装ifconfig等命令,这时候你进入终端,运行ifc ...
- python 读取二进制数据到可变缓冲区中
想直接读取二进制数据到一个可变缓冲区中,而不需要做任何的中间复制操作.或者你想原地修改数据并将它写回到一个文件中去. 为了读取数据到一个可变数组中,使用文件对象的readinto() 方法.比如 im ...