Java中的集合

集合

List

有序的
允许重复的

ArrayList实现类:基于数组实现

remove语句,删除成功则返回true,不成功则返回false
注:不要在迭代时进行删除,否则会出错,可以使用迭代器自身的remove方法,如上。

LinkList实现类:基于链表实现

与ArrayList区别:越靠近头部的添加删除,ArrayList越慢,越靠近尾部越快
在什么位置添加内容对LinkList几乎运行速度都一样
根据索引删除,arrayList效率相对较高,但当删除内容在头部是,link快得多
根据元素删除,arrayList删除快
普通for循环,遍历效率arrayList比linkList快得多
foreach循环遍历,两者差不多

Vector也是List子类,基于数组实现

线程安全,arrayList线程不安全,其他两者无区别

Queue队列,ArrayQueue

poll方法 返回第一个值且从队列中删除
peek方法 返回第一个值但不删除

Stack栈

push方法,压栈,与add相同
peek 返回最后一个值不删除
pop 返回最后一个的值且删除

List的几种迭代方式

//普通for循环
for (int i = 0; i < list.size(); i++) {
    System.out.print(list.get(i) + " ");

}
System.out.println();
//增强for循环
for (Entry s : list) {
    System.out.print(s + " ");
}
System.out.println();
//迭代器
Iterator<Entry> iterator = list.iterator();
while (iterator.hasNext()) {
    System.out.print(iterator.next()+ " ");
}
System.out.println();
//1.8以后的迭代方法, 如果已经有了方法了就用::符号
list.forEach(System.out::print);
System.out.println();
//常见的lambda语法
list.forEach(s -> System.out.print(s + " "));

list中的选择性删除的方式

//把list中所有的不能被3整除的删掉, 需要有个中间的集合来保存要删除的元素
ArrayList<Entry> removes = new ArrayList<>();
for (Entry entry : list) {
    if(entry.getIndex() % 3 != 0){
        removes.add(entry);
    }
}
list.removeAll(removes);
//  lambda表达式
//list.removeIf(e -> e.getIndex() % 3 != 0);

list和数组

都是存储相同数据类型的元素
但是list的长度是可变的, 数组的元素是不可变的

栈和队列

//队列
Queue<Integer> queue = new ArrayDeque<>();
queue.add(1);
System.out.println(queue.poll());
System.out.println("队列的size是: " + queue.size());
System.out.println("======================================");
Stack<Integer> stack = new Stack<>();
stack.push(59);;
System.out.println(stack.pop());

set

无序的
不允许重复(添加顺序和存储顺序)
只能使用迭代器或者增强for循环进行遍历

HashSet

如何判断是相同元素:

首先判断HashCode是否一样
如果一样, 比较equals方法, 如果也返回true, 则视为相同

TreeSet

如何存的?

(树形结构 -> 二叉树 -> 红黑树)

如何判断是否相同?

  1. 让比较对象 实现Comparable接口(一劳永逸的解决方案)
  2. 给TreeSet对象传入一个实现Comparator的对象(更加灵活)注意: 如果两者都实现了, 依第2种方式为准

总结

Collection: 父接口:
Set: 接口-实现类: HashSet, LinkedHashSet
List: 接口-实现类: LinkedList, Vector, ArrayList
SortedSet: 接口-实现类: TreeSet

Map接口-实现类: HashMap, HashTable, LinkedHastMap, Properties

1, List: 有序列表, 允许存放重复的元素

实现类 :
ArrayList:数组实现,查询快,增删慢,线程不安全,轻量级;
LinkedList:链表实现,增删快,查询慢
Vector:数组实现,线程安全,重量级

2, Set:

无序集合,不允许存放重复的元素;允许使用null元素

HashSet 的后台有一个HashMap;初始化后台容量;只不过生成一个HashSet的话,系统只提供key的访问; 如果有两个Key重复,那么会覆盖之前的;

实现类 HashSet:equals返回true,hashCode返回相同的整数;哈希表;存储的数据是无序的。

实现类LinkedHashSet:此实现与 HashSet 的不同之外在于,后者维护着一个运行于所有条目的双重链接列表。存储的数据是有序的。

3、Map
HashMap:键值对,key不能重复,但是value可以重复;key的实现就是HashSet;value对应着放;允许null的键或值;
Hashtable:线程安全的,不允许null的键或值;
Properties::key和value都是String类型,用来读配置文件;

TreeMap:对key排好序的Map; key 就是TreeSet, value对应每个key; key要实现Comparable接口或TreeMap有自己的构造器;

LinkedHashMap: 此实现与 HashMap 的不同之处在于,后者维护着一个运行于所有条目的双重链接列表。存储的数据是有序的。

4、两个工具类 Arrays 和 Collections
1.Arrays、此类包含用来操作数组(比如排序和搜索)的各种方法。

2.Collections、主要提供了在 collection 上进行操作的静态方法(同步集合类方法) 。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值