A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 695065397 初级黑马   /  2019-5-19 10:27  /  763 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

Collection集合
集合类的特点
​提供一种存储空间可变的存储模型,存储的数据容量可以随时发生改变
Collection集合的常用方法
方法名
说明

boolean add(E e)添加元素
boolean remove(Object o)从集合中移除指定的元素
void   clear()清空集合中的元素
boolean contains(Object o)判断集合中是否存在指定的元素
boolean isEmpty()判断集合是否为空
int   size()集合的长度,也就是集合中元素的个数List集合
List集合特点有索引可以存储重复元素元素存取有序
方法名
描述

void add(int index,E   element)在此集合中的指定位置插入指定的元素
E remove(int   index)删除指定索引处的元素,返回被删除的元素
E set(int index,E   element)修改指定索引处的元素,返回被修改的元素
E get(int   index)返回指定索引处的元素并发修改异常
出现的原因
​        迭代器遍历的过程中,通过集合对象修改了集合中的元素,造成了迭代器获取元素中判断预期修改值和实际修改值不一致,则会出现:ConcurrentModificationException
解决的方案
​        用for循环遍历,然后用集合对象做对应的操作即可
[Java] 纯文本查看 复制代码
public class ListDemo {
    public static void main(String[] args) {
        //创建集合对象
        List<String> list = new ArrayList<String>();

        //添加元素
        list.add("hello");
        list.add("world");
        list.add("java");

        //遍历集合,得到每一个元素,看有没有"world"这个元素,如果有,我就添加一个"javaee"元素,请写代码实现
//        Iterator<String> it = list.iterator();
//        while (it.hasNext()) {
//            String s = it.next();
//            if(s.equals("world")) {
//                list.add("javaee");
//            }
//        }

        for(int i=0; i<list.size(); i++) {
            String s = list.get(i);
            if(s.equals("world")) {
                list.add("javaee");
            }
        }

        //输出集合对象
        System.out.println(list);
    }
}
集合的案例-List集合存储学生对象三种方式遍历学生类
[Java] 纯文本查看 复制代码
public class Student {
    private String name;
    private int age;

    public Student() {
    }

    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

测试类
[Java] 纯文本查看 复制代码
public class ListDemo {
    public static void main(String[] args) {
        //创建List集合对象
        List<Student> list = new ArrayList<Student>();

        //创建学生对象
        Student s1 = new Student("林青霞", 30);
        Student s2 = new Student("张曼玉", 35);
        Student s3 = new Student("王祖贤", 33);

        //把学生添加到集合
        list.add(s1);
        list.add(s2);
        list.add(s3);

        //迭代器:集合特有的遍历方式
        Iterator<Student> it = list.iterator();
        while (it.hasNext()) {
            Student s = it.next();
            System.out.println(s.getName()+","+s.getAge());
        }
        System.out.println("--------");

        //普通for:带有索引的遍历方式
        for(int i=0; i<list.size(); i++) {
            Student s = list.get(i);
            System.out.println(s.getName()+","+s.getAge());
        }
        System.out.println("--------");

        //增强for:最方便的遍历方式
        for(Student s : list) {
            System.out.println(s.getName()+","+s.getAge());
        }
    }
}

1List集合子类的特点
ArrayList集合
​        底层是数组结构实现,查询快、增删慢
LinkedList集合
​        底层是链表结构实现,查询慢、增删快
LinkedList集合的特有功能
方法名
说明

public void addFirst(E e)在该列表开头插入指定的元素
public void addLast(E e)将指定的元素追加到此列表的末尾
public E getFirst()返回此列表中的第一个元素
public   E getLast()返回此列表中的最后一个元素
public E removeFirst()从此列表中删除并返回第一个元素
public   E removeLast()从此列表中删除并返回最后一个元素Set集合Set集合的特点
元素存取无序
没有索引、只能通过迭代器或增强for循环遍历
不能存储重复元素
HashSet集合概述和特点
HashSet集合的特点
底层数据结构是哈希表,对集合的迭代顺序不作任何保证
也就是说不保证存储和取出的元素顺序一致,没有带索引的方法
所以不能使用普通for循环遍历
由于是Set集合,所以是不包含重复元素的集合
LinkedHashSet集合特点
  • 哈希表和链表实现的Set接口,具有可预测的迭代次序
  • 由链表保证元素有序,也就是说元素的存储和取出顺序是一致的
  • 由哈希表保证元素唯一,也就是说没有重复的元素








0 个回复

您需要登录后才可以回帖 登录 | 加入黑马