一、集合相比数组的优势
- 不限制长度,动态改变
- 可以频繁的对数据进行增删
- 可以存储具有一对一关系的数据
- 可以轻松解决数据重复问题
二、集合框架的体系结构
-
Collection
-
List(下面都是List的实现类)
定义:元素有序并且可以重复的集合,称为序列
-
ArrayList(查找或者更新元素)
底层由数组实现,在列表尾部插入或者删除数据非常有效
-
方法:
get():获取单个数据 size():获取长度 add(Object o):直接添加对象进去 add(index i,Object o):将指定对象添加到对应的下标处 remove(index):移除对应下标的数据 remove(Object o):移除对象
-
案例(向ArrayList中添加字符串)
package com.imooc.set; import java.util.List; import java.util.ArrayList; public class ListDemo1 { public static void main(String[] args) { List list=new ArrayList(); list.add("java"); list.add("c++"); list.add("php"); list.add("swift"); //输出元素个数 System.out.println("列表中元素的个数为:"+list.size()); System.out.println("*******************"); for(int i=0;i<list.size();i++) { System.out.println(list.get(i));//通过get获取元素 } System.out.println("*******************"); list.remove("swift"); for(int i=0;i<list.size();i++) { System.out.println(list.get(i));//通过get获取元素 } } }
输出结果:
列表中元素的个数为:4 ******************* java c++ php swift ******************* java c++ php
-
-
LinkList(待补充)
-
-
Queue
-
Set(下面都是Set的实现类)
定义:元素无序并且不可以重复的集合,称为集。
-
HashSet(适用于存取和查找的情况)
是Set的一个重要实现类,称为哈希集,元素无序且不可以重复
-
方法:
iterator():构造迭代器 contains():查找元素
-
案例:
package com.imooc.set; import java.util.HashSet; import java.util.Iterator; import java.util.Set; public class WordDemo { public static void main(String[] main) { // 目的:将英文单词添加到HashSet中 Set set=new HashSet(); // 向集合中添加元素 set.add("blue"); set.add("red"); set.add("black"); set.add("yellow"); set.add("white"); // 显示集合的内容 System.out.println("集合中的元素为:"); Iterator it = set.iterator();//构造迭代器 // 遍历迭代器并输出元素 while (it.hasNext()) { System.out.print(it.next() + " "); } System.out.println(); // 在集合中插入一个相同字符串 set.add("white"); it = set.iterator(); // 遍历迭代器并输出元素 System.out.println("**************************"); System.out.println("插入重复元素后的输出结果为:"); while (it.hasNext()) { System.out.print(it.next() + " "); } //插入失败,但是不会报错 //查找 System.out.println("\n**************************"); if(set.contains("white")) {//用contains查找白色 System.out.println("找到白色了!"); }else { System.out.println("没有找到"); } //删除 System.out.println("************************"); set.remove("red");//删除红色 it = set.iterator(); while (it.hasNext()) { System.out.print(it.next() + " "); } } }
结果:
集合中的元素为: red blue white black yellow ************************** 插入重复元素后的输出结果为: red blue white black yellow ************************** 找到白色了! ************************ blue white black yellow
-
-
-
-
Map
-
形式
数据以键值对(key-value)的形式存储的
-
特点
- key的值是唯一的,value不是唯一
- 可以通过key快速找到value
- 一个key最多只能映射一个value
-
HashMap(Map的实现类)
-
使用的方法:
entrySet();//获得Map对象的所有Key-value keySet();//获得Map对象所有的Key getKey();//获得key的值 getValue();//获得value的值
-
案例:
package com.imooc.set; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Map.Entry; import java.util.Scanner; import java.util.Set; public class DictionaryDemo { public static void main(String[] args) { Map<String,String> animal=new HashMap<String,String>(); System.out.println("请输入三组单词对应的注释,并存放到HashMap中"); Scanner console=new Scanner(System.in); //添加数据 int i=0; while(i<3){ System.out.println("请输入key值(单词):"); String key=console.next(); System.out.println("请输入value值(注释):"); String value=console.next(); animal.put(key, value); i++; } //打印输出value的值(直接使用迭代器) System.out.println("*****************************************"); System.out.println("使用迭代器输出所有的value:"); Iterator<String> it=animal.values().iterator(); while(it.hasNext()){ System.out.print(it.next()+" "); } System.out.println(); System.out.println("*****************************************"); //打印输出key和value的值 //通过entrySet方法 System.out.println("通过entrySet方法得到key-value:"); Set<Entry<String, String>> entrySet=animal.entrySet(); for(Entry<String, String> entry:entrySet){ System.out.print(entry.getKey()+"-");; System.out.println(entry.getValue()); } System.out.println(); System.out.println("*****************************************"); //通过key找到value并输出 //使用keySet方法 System.out.println("请输入要查找的单词:"); String strSearch=console.next();//从键盘接收的数据 //1.取得keySet Set<String> keySet=animal.keySet();//先将所有的key放在集合当中 //2.遍历keySet for(String key:keySet){ if(strSearch.equals(key)){ System.out.println("找到了!"+"键值对为:"+key+"-"+animal.get(key)); break; }else { System.out.println("对不起,没有找到!"); break; } } } }
-
结果:
请输入三组单词对应的注释,并存放到HashMap中 请输入key值(单词): 1 请输入value值(注释): 猫 请输入key值(单词): 2 请输入value值(注释): 狗 请输入key值(单词): 3 请输入value值(注释): 猪 ***************************************** 使用迭代器输出所有的value: 猫 狗 猪 ***************************************** 通过entrySet方法得到key-value: 1-猫 2-狗 3-猪 ***************************************** 请输入要查找的单词: 2 找到了!键值对为:2-狗
-
-
-
注意事项:
-
集合在java.util包中,使用时需要导入
-
范型
作用:限制集合的类型
Set<Cat> set=new HashSet<Cat>();
-
通过键盘输入数据
import java.util.Scanner; Scanner console=new Scanner(System.in); String key=console.next();//将输入的值赋值给key
-