06-单列集合

提供批量数据的存储和处理方案

可以保存不同类型的数据,长度自增

常用方法

方法作用返回值
size()元素个数int
add(元素)添加元素boolean
addAll(集合)添加集合进集合boolean
isEmpty()是否有元素boolean
contains(元素)是否包含元素boolean
remove(元素)移除元素boolean
removeAll(集合)移除集合boolean
removeIf(Predicate filter)移除有条件元素boolean
clear()清空集合void
toArray()集合转数组Object[]
iterator()获取集合迭代器对象Iterator
Collections.copy(有固定长度的新集合, 老集合)复制集合ArrayList<>
Collections.sort(集合)比较器void
Collections.sort(集合,外部比较器实现类对象)比较器void

collections.copy

//必须创建固定长度的数组 将其转为有序集合实现类形式
ArrayList<String> al = new ArrayList<String>(Arrays.asList(new String[as.size()]));
//通过copy方法 将第二个参数(老集合)元素复制到第一个参数(新集合)中
Collections.copy(al, as);

 removeIf(Predicate filter)用法

public class 类名 implements Predicate {
	@Override
	public boolean test(Object t) {
		// t表示每个元素通过逻辑判断,返回true移除,否则保留
        if(t instanceof Integer){
            return true;
        }
		return false;
	}
}
//测试类
//通过Predicate实现类对元素进行过滤
c.removeIf(new 类名());

 迭代器

父类

Iterator

方法作用返回值
hasNext()查询是否有下一个元素boolean
next()获取下一个元素,且指针下跳Object
Iterator<User> it = 集合.iterator();
//查找下一个元素是否存在
while(lt.hasNext()) {
    //获取下一个元素 并且指针下跳
    System.out.println(lt.next());
}

子类

ListIterator(双向迭代器)

方法作用返回值
hasNext()查询是否有下一个元素boolean
next()获取下一个元素,且指针下跳Object
hasPrevious()查询是否有上一个元素boolean
previous()获取上一个元素,且指针上跳Object
ListIterator<User> li = 集合.listIterator(集合.size());
//查找上一个元素是否存在
while(li.hasPrevious()) {
    //获取上一个元素 并且指针上跳
    System.out.println(li.previous());
}

比较器

内部比较器

实现Comparable<E>接口内的compareTo(E e)方法

// 先在实体类中(保存的类型)实现Comparable接口
public class User implements Comparable<User>{
    String name;
    int age;
    @Override
    public int compareTo(User o) {
        //2.编写比较规则
        if(this.name.equals(o.name)) {
            //当姓名相同的时候
            //降序
            return o.age - this.age;
            //升序
            //return this.age - o.age;
        }
        //姓名不同的时候,this在前 升序
        return this.name.compareTo(o.name);
    }
}
// 3.测试类
// 写好User类型的排序规则,使用Collections.sort()会通过冒泡排序 调用比较规则
Collections.sort(集合);

外部比较器

有多种排序方案,单独创建排序类

实现Comparator<E>接口类的compare(E o1,E o2)方法

//单独创建一个类,实现Comparator接口作为外部比较器类
public class 外部比较器 implements Comparator<User> {
    @Override
    public int compare(User o1, User o2) {
        // 姓名降序 年龄降序 成绩降序
        if(o1.name.equals(o2.name)) {
            if(o1.age == o2.age) {
                return o2.score > o1.score?1:-1;//降序
            }
            return o2.age - o1.age;
        }
        return o2.name.compareTo(o1.name);
    }
}
//测试类
Collections.sort(集合, new 外部比较器());

去重

java通过重写hashCode()和equals(Object)实现去重

泛型

约束可保存数据的类型,否则默认为Object类型

List(有序集合)

  • 保存顺序与输出顺序一致

  • 有索引,可保存重复数据

  • 可使用任意循环输出展示

ArrayList

  • 底层为数组模型

  • 增删慢,扩容移动元素

  • 查询快,通过下标锁定元素

构造方法

构造方法作用
new ArrayList()空参构造 - 默认长度为10的数组
new ArrayList(int)单参构造 - 参数定义初始数组长度
new ArrayList(集合)可将其他单列集合传入,转为有序集合

常用方法

方法作用返回值
add(下标,元素)指定下标加元素void
get(下标)下标找元素E
indexOf(元素)元素找下标int
lastIndexOf(元素)元素逆向找下标int
remove(下标)下标删对象,返回移除元素Object
set(下标,元素 )新元素换下标老元素,返回老元素E
listIterator()获取双向迭代器ListIterator<E>
listIterator(下标)获取双向迭代器,设置指针初始位置ListIterator<E>

LinkedList

  • 双链结构

  • 增删快,无需移动和扩容,也不会产生垃圾数据

  • 查询慢,查询需从头或尾部查找

构造方法

构造方法作用
new LinkedList()空参构造 - 默认长度为10的数组
new LinkedList(集合)可将其他单列集合传入,转为有序集合

常用方法

方法作用返回值
addFirst(E)头部添加元素void
addLast(E)尾部添加元素void
getFirst()获取第一个元素E
getLast()获取最后一个元素E
removeFirst()删除第一个元素E
removeLast()删除最后一个元素E

Vector

  • 线程安全的古老集合

Vector<Integer> vi = new Vector<Integer>();
//Vector特有迭代器
Enumeration<Integer> en = vi.elements();
while(en.hasMoreElements()) {
    System.out.println(en.nextElement());
}

Set(无序集合)

  • 保存顺序与输出顺序不一致

  • 没有索引,不可保存重复数据

  • 只能使用增强for循环查询元素

HashSet

  • 不保证元素排列顺序,顺序可能与添加顺序不同

LinkedHashSet

  • HashSet的子类

  • 多了一根链条记录数据保存顺序,但依然没索引

  • 重写了hashCode() equals(Object) 实现默认去重

TreeSet

  • 存储的数据类型,必须有比较器,否则存储失败

  • 实现类Comparable接口的compareTo()默认去重

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值