变量:存储数据的容器,只能存储一个数据
数组:存储数据的容器,存储多个相同类型的数据
集合:存储数据的容器,存储多个不同类型的数据
集合框架:如果并不知道程序运行时会需要多少对象,或者需要 更复杂方式存储对象——可以使用Java集合框架
Java集合框架提供了一套性能优良、使用方便的接口和类,它们位于java.util包中,如下图,这里主要讲述ArrayList、LinkedList、HashSet、HashMap
Collection 接口存储一组 不唯一,无序的对象
- public class NewsTitle {
- private int id;
- private String name;
- private String author;
-
- public NewsTitle() {
- super();
- }
-
- public NewsTitle(int id, String name, String author) {
- super();
- this.id = id;
- this.name = name;
- this.author = author;
- }
-
- public int getId() {
- return id;
- }
-
- public void setId(int id) {
- this.id = id;
- }
-
- public String getName() {
- return name;
- }
-
- public void setName(String name) {
- this.name = name;
- }
-
- public String getAuthor() {
- return author;
- }
-
- public void setAuthor(String author) {
- this.author = author;
- }
-
- @Override
- public String toString() {
- return "NewsTitle [id=" + id + ", name=" + name + ", author=" + author
- + "]";
- }
- }
List 接口存储一组不唯一,有序(插入顺序)的对象
ArrayList实现了长度可变的数组,在内存中分配连续的空间,遍历元素和随机访问元素的效率比较高
ArrayList常用方法
方法名 | 说明 |
boolean add(Object o) | 在列表的末尾顺序添加元素,起始索引位置从0开始 |
void add(int index,Object o) | 在指定的索引位置添加元素。索引位置必须介于0和列表中元素个数之间 |
int size() | 返回列表中的元素个数 |
Object get(int index) | 返回指定索引位置处的元素。取出的元素是Object类型,使用前需要进行强制类型转换 |
boolean contains(Object o) | 判断列表中是否存在指定元素 |
boolean remove(Object o) | 从列表中删除元素 |
Object remove(int index) | 从列表中删除指定位置元素,起始索引位置从0开始 |
- import java.util.ArrayList;
- import java.util.Iterator;
-
- public class Test {
-
- public static void main(String[] args) {
-
- NewsTitle nt1=new NewsTitle(001,"合肥又发现一名新冠肺炎感染者","合肥日报");
- NewsTitle nt2=new NewsTitle(001,"合肥近日多天有雨","合肥气象局");
- NewsTitle nt3=new NewsTitle(001,"震惊!有一程序员猝死","张三");
-
- //定义一个集合,调用ArrayList类的无参的构造方法,默认构造一个初始容量为 10 的空列表。
- ArrayList al=new ArrayList();
-
- //将新闻标题的对象存储到al集合中
- al.add(nt1);
- al.add(nt2);
- al.add(nt3);
-
- //获取新闻标题的总数,即获取集合中的元素个数
- int num=al.size();
- System.out.println("新闻的标题总数为"+num);
-
- //void add(int index,Object o):在指定的索引位置添加元素。索引位置必须介于0和列表中元素个数之
- al.add(0, nt3);
- NewsTitle news =(NewsTitle)al.get(1);
- System.out.println("获取元素:"+news);
-
- //boolean contains(Object o):判断列表中是否存在指定元素,如果集合中存在你要找的元素,返回true,否则返回false
- boolean result1=al.contains(nt3);
- System.out.println("集合中你需要找到的元素nt3:"+result1);
-
- //boolean remove(Object o):从列表中删除元素,删除成功返回true,删除失败返回false
- boolean result2=al.remove(nt2);
- System.out.println("删除是否成功:"+result2);
-
- //toArray():将集合变成数组
- Object[] obj3 =al.toArray();
- for (int i = 0; i < obj3.length; i++) {
- System.out.println("转换成数组:"+obj3[i]);
- }
- System.out.println("------------------");
- for(Object ob:al){
- NewsTitle nt = (NewsTitle)ob;
- System.out.println(nt);
- }
-
- Object remove(int index):从列表中删除指定位置元素,起始索引位置从0开始
- // Object obj1=al.remove(0);
- // NewsTitle newsTitle1=(NewsTitle)obj1;
- // System.out.println(newsTitle1);
-
- //遍历打印出每个新闻的名称
- for(int i=0;i<al.size();i++){
- Object obj=al.get(i);
- NewsTitle newsTitle=(NewsTitle)obj;
- System.out.println(newsTitle.getName());
- }
-
- //清除集合所有的元素
- // al.clear();
-
- // al.clone();
-
- //判断是否为空
- boolean result=al.isEmpty();
- System.out.println(result);
-
- //iterator():迭代器(遍历),将集合中的元素“转移”到了迭代器这么一个容器中,接下来对迭代器容器进行遍历
- Iterator it =al.iterator();
- //遍历it这个容器,先使用hasNext()方法判断容器中是否有元素,有,使用next()方法取出,然后再判断,如果有,就取出元素,继续再判断,有,继续取出
- //it.hasNext():判断迭代器中是否有元素,如果有元素返回true
- while(it.hasNext()){
- //取出元素
- Object object =it.next();
- NewsTitle nt = (NewsTitle)object;
- System.out.println(nt);
- }
- }
- }
LinkedList采用链表存储方式,插入、删除元素时效率比较高
LinkedList常用方法
方法名 | 说明 |
void addFirst(Object o) | 在列表的首部添加元素 |
void addLast(Object o) | 在列表的末尾添加元素 |
Object getFirst() | 返回列表中的第一个元素 |
Object getLast() | 返回列表中的最后一个元素 |
Object removeFirst() | 删除并返回列表中的第一个元素 |
Object removeLast() | 删除并返回列表中的最后一个元素 |
- import java.util.LinkedList;
-
- public class Test {
-
- public static void main(String[] args) {
-
- // 准备集合中的内容,创建3个NewsTitle类对象
- NewsTitle nt1 = new NewsTitle(1001, "Java中还有这么神奇的事情", "张三");
- NewsTitle nt2 = new NewsTitle(1002, "合肥将变成一个没有传销的城市", "李四");
- NewsTitle nt3 = new NewsTitle(1003, "合肥比亚迪即将建成开厂", "王五");
- NewsTitle nt4 = new NewsTitle(1004, "大湖名城,创新高低", "赵六");
- NewsTitle nt5 = new NewsTitle(1005, "大湖名城,创新高低", "孙七");
-
- //准备容器,创建LinkedList对象
- LinkedList list = new LinkedList();
- list.addLast(nt5);
- list.add(nt1);
- list.add(nt2);
- list.add(nt3);
- list.addFirst(nt4);
-
- for (int i = 0; i < list.size(); i++) {
- System.out.println(list.get(i));
- }
-
- System.out.println("-----------------");
- System.out.println(list.getFirst());
- System.out.println(list.getLast());
-
- System.out.println("-----------------");
- list.removeFirst();
- list.removeLast();
- for (Object object : list) {
- System.out.println(object);
- }
- }
- }
Set 接口存储一组唯一,无序的对象
- import java.util.HashSet;
- import java.util.Iterator;
-
- public class Test {
-
- public static void main(String[] args) {
- //准备数据:创建NewsTitle对象
- NewsTitle nt1 = new NewsTitle(1001, "Java中还有这么神奇的事情", "张三");
- NewsTitle nt2 = new NewsTitle(1002, "合肥将变成一个没有传销的城市", "李四");
- NewsTitle nt3 = new NewsTitle(1003, "合肥比亚迪即将建成开厂", "王五");
- NewsTitle nt4 = new NewsTitle(1004, "大湖名城,创新高低", "赵六");
- NewsTitle nt5 = new NewsTitle(1005, "大湖名城,创新高低", "孙七");
-
- //准备容器
- HashSet hs=new HashSet();
- hs.add(nt1);
- hs.add(nt2);
- hs.add(nt3);
- hs.add(nt4);
- hs.add(nt5);
- hs.add(nt3);
- hs.add(nt3);
- System.out.println(hs.size());
-
- for (Object object : hs) {
- System.out.println(object);
- }
- System.out.println("--------------------");
- Iterator it=hs.iterator();
- while(it.hasNext()){
- Object obj=it.next();
- NewsTitle nt=(NewsTitle)obj;
- System.out.println(nt);
- }
- }
- }
Map接口存储一组键值对象,提供key到value的映射
Map接口常用方法
方法名 | 说明 |
Object put(Object key, Object val) | 以“键-值”对的方式进行存储 |
Object get(Object key) | 根据键返回相关联的值,如果不存在指定的键,返回null |
Object remove(Object key) | 删除由指定的键映射的“键-值对” |
int size() | 返回元素个数 |
Set keySet() | 返回键的集合 |
Collection values() | 返回值的集合 |
boolean containsKey(Object key) | 如果存在由指定的键映射的“键-值对”,返回true |
- import java.util.Collection;
- import java.util.HashMap;
- import java.util.Iterator;
- import java.util.Map;
- import java.util.Set;
-
- public class Test {
-
- public static void main(String[] args) {
- //准备键值对容器用来存储键值
- HashMap hm=new HashMap();
-
- //向集合中存储数据
- hm.put("CN", "中华人民共和国");
- hm.put("RU", "俄罗斯联邦");
- hm.put("US", "美利坚共和国");
- hm.put("JP", "小日本");
-
- System.out.println(hm.size());
-
- Object obj1=hm.get("CN");
- String str1=(String)obj1;
- System.out.println(str1);
-
- //Object remove(key):根据键来删除键值对,返回值是键对应的值
- Object obj2=hm.remove("JP");
- String str2=(String)obj2;
- System.out.println(hm.size());
-
- System.out.println(hm.containsKey("CN"));
- System.out.println(hm.containsKey("JP"));
-
- System.out.println(hm.containsKey("中华人民共和国"));
-
- //keySet():返回集合中所有键值对的键的集合
- Set keys=hm.keySet();
- for (Object obj3 : keys) {
- String key=(String)obj3;
- Object obj4=hm.get(key);
- String value=(String)obj4;
- System.out.println();
- System.out.println(key+"-"+value);
- }
- //Collection values():获取值得集合
- Collection coll=hm.values();
- for (Object object : coll) {
- String value =(String)object;
- System.out.println(value);
- }
-
- System.out.println("---------------------");
- //获取键的集合
- Set keys2=hm.keySet();
- Iterator it=keys2.iterator();
- while(it.hasNext()){
- Object obj=it.next();
- String key=(String)obj;
- Object obj5=hm.get(key);
- String value =(String)obj5;
- System.out.println(key+"-"+value);
- }
-
- System.out.println("------------------------");
- //使用键值对的方式取出集合中的键值对
- Set keyValues=hm.entrySet();
- Iterator iterator=keyValues.iterator();
- while(iterator.hasNext()){
- Object obj =iterator.next();
- Map.Entry me = (Map.Entry)obj;
- Object obje1 = me.getKey();
- String key =(String)obje1;
- Object obje2 =me.getValue();
- String value =(String)obje2;
- System.out.println(key+"-"+value);
- }
- }
- }