day18--Java集合01

打印 上一主题 下一主题

主题 856|帖子 856|积分 2568

Java集合01

1.什么是集合?

前面我们保存数据使用的是数组,数组有不足的地方,我们来分析一下:

  • 长度开始时必须指定,而且一但指定不能更改
  • 保存的必须是同一类型的元素
  • 使用数组进行增加/删除元素的很麻烦----重新创建一个数组,将旧数组的元素拷贝过来


  • 集合的好处:

    • 可以动态地保存任意多个对象,使用比较方便
    • 提供了一系列方便的操作对象的方法:add、remove、set、get等
    • 使用集合添加、删除新元素简单高效

1.1集合的框架体系


  • 集合主要是两组(单列集合,双列集合)
  • Collection接口有两个重要的子接口List和Set,它们的实现子类都是单列集合
  • Map接口的实现子类 是双列集合,存放的是  K-V

例子
  1. package li.collections;
  2. import java.util.*;
  3. public class CollectionsTest {
  4.     public static void main(String[] args) {
  5.         //Collection
  6.         //Map
  7.         ArrayList arrayList = new ArrayList();
  8.         arrayList.add("jack");//单列
  9.         arrayList.add("tony");
  10.         HashMap hashMap = new HashMap();
  11.         hashMap.put("No1","北京");//双列
  12.         hashMap.put("No2","上海");      
  13.     }
  14. }
复制代码
2.Collection接口


  • Collection接口实现类的特点
  1. public interface Collecion<E> extends Iterable<E>
复制代码

  • Collection 实现子类可以存放多个元素,每个元素可以是Object
  • Collection的实现类,有些可以存放重复的元素,有些不可以
  • Collection的实现类,有些是有序的(List),有些是无序的(Set)
  • Collection接口没有直接实现的子类,是通过它的子接口List和Set来实现的
2.1Collection方法


  • add()添加单个元素
  • remove()删除指定元素
  • contains()查找元素是否存在
  • size()获取元素个数
  • isEmpty()判断是否为空
  • clear()清空
  • addAll()添加多个元素
  • containsAll()查找多个元素是否都存在
  • removeAll()删除多个元素
例子1:Collection接口不能直接被实例化,因此以实现了接口的子类ArrayList来演示
  1. package li.collections;
  2. import java.util.*;
  3. public class CollectionMethod {
  4.     public static void main(String[] args) {
  5.         List list = new ArrayList();
  6.         //1. add()添加单个元素
  7.         list.add("jack");
  8.         list.add(10);//list.add(new Integer(10)); 自动装箱
  9.         list.add(true);
  10.         System.out.println("list="+list);//list=[jack, 10, true]  注意里面的元素都是对象,非基本数据类型
  11.         //2. remove()删除指定元素
  12.         //list.remove(0);//指定删除的索引
  13.         //System.out.println("list="+list);//list=[10, true]
  14.         list.remove(true);//指定删除某个对象
  15.         System.out.println("list="+list);//list=[jack, 10]
  16.         //3. contains()查找元素是否存在
  17.         System.out.println(list.contains("jack"));//true
  18.         //4. size()获取元素个数
  19.         System.out.println(list.size());//2
  20.         //5. isEmpty()判断是否为空
  21.         System.out.println(list.isEmpty());//false
  22.         //6. clear()清空
  23.         list.clear();
  24.         System.out.println(list);//[]  空的集合
  25.         //7. addAll()添加多个元素
  26.         ArrayList list2 =new ArrayList();
  27.         list2.add("红楼梦");
  28.         list2.add("三国演义");
  29.         list.addAll(list2);
  30.         System.out.println("list="+list);//list=[红楼梦, 三国演义]
  31.         //8. containsAll()查找多个元素是否都存在
  32.         System.out.println(list.containsAll(list2));//true
  33.         //9. removeAll()删除多个元素
  34.         list.add("聊斋志异");
  35.         list.removeAll(list2);
  36.         System.out.println("list="+list);//list=[聊斋志异]
  37.     }
  38. }
复制代码
3.迭代器遍历


  • 迭代:即Collection集合元素的通用获取方式。在取元素之前先要判断集合中有没有元素,如果有,就把这个元素取出来,继续再判断,如果还有就再取出出来。一直把集合中的所有元素全部取出。这种取出方式专业术语称为迭代。
  • 基本介绍:

  • Iterator对象称为迭代器,主要用于遍历Collection集合中的元素。
  • 所有实现了Collection接口的集合类都有一个iterator()方法,用以返回一个实现了Iterator接口的对象,即可以返回一个迭代器
  • Iterator仅用于遍历集合,Iterator本身并不存放对象


  • Iterator接口的常用方法如下:

    • public E next():返回迭代的下一个元素。
    • public boolean hasNext():如果仍有元素可以迭代,则返回 true。
    • default void remove():

  • 迭代器的执行原理:
PS:在调用iterator.next()方法之前一定必须要调用iterator.hasNext()方法来进行检测,若不调用且下一条记录无效则会抛出 NoSuchElementException 异常。
例子:
  1. package li.collections;
  2. import java.util.ArrayList;
  3. import java.util.Collection;
  4. import java.util.Iterator;
  5. public class CollectionIterator {
  6.     @SuppressWarnings({"all"})
  7.     public static void main(String[] args) {
  8.         Collection col = new ArrayList();
  9.         col.add(new Book("三国演义","罗贯中",10.1));
  10.         col.add(new Book("小李飞刀","古龙",5.1));
  11.         col.add(new Book("红楼梦","曹雪芹",34.6));
  12.         System.out.println("col"+col);//col[Book{name='三国演义', author='罗贯中', price=10.1}, Book{name='小李飞刀', author='古龙', price=5.1}, Book{name='红楼梦', author='曹雪芹', price=34.6}]
  13.         //现在想要遍历这个col集合
  14.         //1.先得到col集合对应的迭代器
  15.         
  16.         Iterator iterator = col.iterator();
  17.         
  18.         //2.使用while循环遍历
  19.         while (iterator.hasNext()) {
  20.             Object next =  iterator.next();
  21.             System.out.println(next);
  22.         }
  23.         //3.当退出while循环之后,这使得iterator迭代器指向最后的元素,
  24.         // 这时如果再执行iterator.next()就会出现NoSuchElementException异常
  25.         //4.如果想要再次遍历集合,则需要重置迭代器
  26.         //重置迭代器,这之后就可以再次遍历,实质上是重新创建了一个迭代器对象
  27.         iterator = col.iterator();
  28.     }
  29. }
  30. class Book{
  31.     private String name;
  32.     private String author;
  33.     private double price;
  34.     public Book(String name, String author, double price) {
  35.         this.name = name;
  36.         this.author = author;
  37.         this.price = price;
  38.     }
  39.     public String getName() {
  40.         return name;
  41.     }
  42.     public void setName(String name) {
  43.         this.name = name;
  44.     }
  45.     public String getAuthor() {
  46.         return author;
  47.     }
  48.     public void setAuthor(String author) {
  49.         this.author = author;
  50.     }
  51.     public double getPrice() {
  52.         return price;
  53.     }
  54.     public void setPrice(double price) {
  55.         this.price = price;
  56.     }
  57.     @Override
  58.     public String toString() {
  59.         return "Book{" +
  60.                 "name='" + name + '\'' +
  61.                 ", author='" + author + '\'' +
  62.                 ", price=" + price +
  63.                 '}';
  64.     }
  65. }
复制代码
快捷键:itit
快捷键:Ctrl+j    显示所有快捷键
4.集合增强


  • Collection接口遍历对象的方式1--迭代器遍历      2--for循环增强
  • 增强for循环,可以代替iterator迭代器,特点:增强for循环就是简化版的iterator,本质一样。只能用于遍历集合或者数组。
  • 基本语法:
    1. for(元素类型 元素名:集合名或数组名){
    2.     访问元素
    3. }
    复制代码
    例子:
    1. package li.collections;
    2. import java.util.ArrayList;
    3. import java.util.Collection;
    4. public class CollectionFor {
    5.     @SuppressWarnings({"all"})
    6.     public static void main(String[] args) {
    7.         Collection col = new ArrayList();
    8.         col.add(new Book("三国演义","罗贯中",10.1));
    9.         col.add(new Book("小李飞刀","古龙",5.1));
    10.         col.add(new Book("红楼梦","曹雪芹",34.6));
    11.         //增强for,用于集合
    12.         //增强for底层仍然是迭代器
    13.         //因此增强for可以理解成简化版的迭代器
    14.         for (Object book:col) {//元素类型 元素名:集合名或数组名
    15.             System.out.println("book="+book);
    16.         }
    17.         //使用增强for,不但可以适用于集合,还可以用于数组
    18.         int[] nums ={1,3,8,10};
    19.         for (int i:nums){
    20.             System.out.println("i="+i);
    21.         }
    22.     }
    23. }
    复制代码

快捷键:集合名.for
5.List接口

List接口是Collection接口的子接口

  • List集合类中的元素有序(即添加顺序和取出顺序一致),且可重复
  • List集合中的每个元素都有其对应的顺序索引,即支持索引
  • List容器中的元素都对应一个整数型序号记载在其容器中的位置,可以根据序号存取容器中的元素
  • JDK API中List接口的实现子类有很多,常用的有ArrayList、LinkedList和Vector
5.1List接口的常用方法

<ol>boolean add(int index, E element)  将指定的元素插入此列表中的指定位置(可选操作)

boolean addAll(int index, Collection

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

我可以不吃啊

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表