Java基础 9.13
1.集合的理解和好处
我们在之前保存多个数据使用的时数组,那么数组有不足的地方
数组
- 长度开始时必须指定,而且一旦指定,不能修改
- 保存的必须为同一类型的元素
- 使用数组进行增加元素的示意代码-比较麻烦
集合
- 可以动态保存任意多个对象 使用比较方便
- 提供了一系列方便的操作对象的方法:add、remove、set、get等
- 使用集合添加,删除新元素的示意代码-简洁
2.集合的框架体系
Java的集合类很多 主要分为两大类(背下来!)
- 集合主要是两组(单列集合 双列集合)
- Collection接口有两个重要的子接口 List Set 他们的实现子类都是单列集合
- Map 接口的实现子类 是双列集合 存放的K-V(键值对)
package com.logic.collection_;import java.util.ArrayList;
import java.util.HashMap;/*** @author logic* @version 1.0*/
@SuppressWarnings("all")
public class Collection_ {public static void main(String[] args) {ArrayList arrayList = new ArrayList();arrayList.add("all");arrayList.add("one");HashMap hashMap = new HashMap();hashMap.put("one", "1");hashMap.put("two", "2");}
}
3.Collection接口和常用方法
Collection接口实现类的特点
- Collection实现子类可以存放多个元素,每个元素可以是Obiect
- 有些Collection的实现类,可以存放重复的元素,有些不可以
- 有些Collection的实现类,有些是有序的(List),有些无序(Set)
- Collection接口没有直接的实现子类,是通过它的子接口Set 和List来实现的
package com.logic.collection_;import java.util.ArrayList;
import java.util.List;/*** @author logic* @version 1.0*/
public class CollectionMethod {@SuppressWarnings({"all"})public static void main(String[] args) {List list = new ArrayList();
// add:添加单个元素list.add("jack");list.add(10);//list.add(new Integer(10))list.add(true);System.out.println("list=" + list);
// remove:删除指定元素//list.remove(0);//删除第一个元素list.remove(true);//指定删除某个元素System.out.println("list=" + list);
// contains:查找元素是否存在System.out.println(list.contains("jack"));//T
// size:获取元素个数System.out.println(list.size());//2
// isEmpty:判断是否为空System.out.println(list.isEmpty());//F
// clear:清空list.clear();System.out.println("list=" + list);
// addAll:添加多个元素ArrayList list2 = new ArrayList();list2.add("红楼梦");list2.add("三国演义");list.addAll(list2);System.out.println("list=" + list);
// containsAll:查找多个元素是否都存在System.out.println(list.containsAll(list2));//T
// removeAll:删除多个元素list.add("聊斋");list.removeAll(list2);System.out.println("list=" + list);//[聊斋]
// 说明:以ArrayList实现类来演示.}
}
Collection接口遍历元素方式1-使用Iterator(迭代器)
基本介绍
- Iterator对象称为迭代器,主要用于遍历 Collection 集合中的元素
- 所有实现了 Collectign 接口的集合类都有一个iterator()方法,用以返回一个实现了Iterator接口的对象,即可以返回一个迭代器
- lterator 仅用于遍历集合,lterator 本身并不存放对象
在调用Iterator.next()方法之前,必须要调用Iterator.hasNext(),若不调用,且下一条记录无效,直接调用next()会抛出进行检测。NoSuchElementException异常
迭代器的使用案例
package com.logic.collection_;import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;/*** @author logic* @version 1.0*/
public class CollectionIterator {public static void main(String[] args) {Collection col = new ArrayList();col.add(new Book("三国演绎", "罗贯中", 20));col.add(new Book("红楼梦", "曹雪芹", 23));col.add(new Book("西游记", "吴承恩", 30));//System.out.println("col=" + col);Iterator iterator = col.iterator();int i = 0;//一个快捷键 快速生成while循环 => itit//ctrl + j 显示快捷模板while (iterator.hasNext()) {System.out.println("i = " + i);Object obj = iterator.next();System.out.println("obj = " + obj);i++;}//当退出while循环后 , 这时iterator迭代器,指向最后的元素//iterator.next();//NoSuchElementException//如果希望再次遍历,需要重置我们的迭代器iterator = col.iterator();System.out.println("===第二次遍历===");while (iterator.hasNext()) {Object obj = iterator.next();System.out.println("obj=" + obj);}}
}class Book {private String bookName;private String bookAuthor;private double bookPrice;public Book(String bookName, String bookAuthor, double bookPrice) {this.bookName = bookName;this.bookAuthor = bookAuthor;this.bookPrice = bookPrice;}public String getBookName() {return bookName;}public void setBookName(String bookName) {this.bookName = bookName;}public String getBookAuthor() {return bookAuthor;}public void setBookAuthor(String bookAuthor) {this.bookAuthor = bookAuthor;}public double getBookPrice() {return bookPrice;}public void setBookPrice(double bookPrice) {this.bookPrice = bookPrice;}@Overridepublic String toString() {return "Book{" +"bookName='" + bookName + '\'' +", bookAuthor='" + bookAuthor + '\'' +", bookPrice=" + bookPrice +'}';}
}