Java:集合

集合

对象数组: 语法: 类名[] d 对象名 = new 类名[5];

数组的缺点: 只要创建出来就固定其长度了, 所有扩展性差, ==>使用集合来解决

数组与集合 的关系:

相同点:
1.数组与集合都是用来存数据, 都可以通过索引来获取数据
2.数组与集合都是采用数组的方法来进行存的
不同点:
1.数组可以存基本数据类型,也可以存引用数据类型, 集合只能够存引用数据类型

2.数组的长度是固定的,集合的长度是可变的

集合的框架: 单列: 每一个存的数据的都是独立的

                                    Collection  跟接口 

                     /                                   \
                    /                                      \
         List(有序,有索引,可以重复)        Set(无序,不可以是要美好普通的for循环)
                   /                                         \
                  /                                            \
        ArrayList(插入慢,查询快)(重点)        HashSet(以哈希来进行存)  TreeSet( 以二叉数) 
            LinedList(查询慢,插入快)
              Vector  线程安全                                            

双列: 以键值对存 key values

集合:集合也是一个容器,用于存数据。

Collection:1. Collection 层次结构 中的根接口 索引也是从0开始
常规的一些方法:
boolean add(E e) 添加,返回值是bealoon 添加成功返回true
boolean contains(Object o) 判断是否有此元素 如果存在返回true 否则false
boolean isEmpty() 判断集合里是否有元素
boolean remove(Object o) 根据集合里的元素进行删除
int size() 获取到集合的长度
Object[] toArray() 把集合转换成数组
void clear() 清空数组里的所有的元素
iterator() 把集合转换成迭代器的方法

所有带All 的方法:
1.addAll(Collection<? extends E> c) 把小集合添加到大集合里, 例如: co.addAll©; 把集合 c的所有数据添加到co

2.boolean containsAll(Collection<?> c) 如果此 collection 包含指定 collection 中的所有元素,则返回 true。

3.removeAll(Collection<?> c) 返回值:如果存在交集返回 是true , 返回的是没有较交集的数据

4.retainAll(Collection<?> c) 返回值 判断是否发生该变,如果发生该变返回true,不发生该变返回false 取出来的是交集的结果

如何对集合来进行遍历

  1. for
  2. 增强for 循环
  3. 使用迭代器来进行遍历
    Iterator : 是一个接口,不能够被实例化
    常规的方法:
    hasNext() 判断是否有下一个元素, 如果有返回true
    next() 获取到下一个元素
    remove() 移除迭代器的某一个元素

// 遍历 语法:
使用迭代器
while 循环 (迭代器.hasNext()){
next() // 获取其元素

}
1. 把一个集合转换成迭代器
2. 获取值的时候,不要通过next()方法来获取具体的值,一定要先获取对象, 通过对象来获取值

增强for 循环的底层也是使用迭代器来实现,也是通过指针.

// 写一个新闻对象 id title content dateTime
// 添加两个数据到集合 ,使用两种方法进行遍历

List: 导包 java.util 是一个接口
特点:1. 有顺序 2. 有索引 3.可以重复

List集合常规独有的一些方法:
public void add(int index, E element) 根据索引的位置来进行添加

E get(int index) 根据索引来获取其值

E remove(int index) 根据索引来进行删除

E set(int index, E element) 也是替换 (前提这个已经存在)
总结: 这个方法都是根据索引来进行操作的

迭代器遍历报错: java.util.ConcurrentModificationException 对象的并发修改

ListIterator 这个迭代器是针对 list 集合而存在, 它的父类也是Iterator
//尝试解决这个bug

ArrayList: 1.有顺序 2. 有索引 3.可以重复 5.线程不安全
4. 以数组的方式来存数据 :特点 :查询快 增加 删除修改慢 (最常用的)

构造方法:跟StringBuffer 的有点类似.

ArrayList 常规的方法 add() 添加(默认也是向末尾添加数据) 获取 get(index) 根据索引来获取 ( 最常用的)

LinkedList: 1.是以链表式来进行存 特点: 增加 删除 修改 速度快,效率高 查询速度慢
LinkedList 也是 list 的 实现类 (不常用 )

两个构造 : 一般使用空的构造

常规的方法:
public void addFirst(E e) 插入数据到集合的头部
public void addLast(E e) 插入到末尾 注意点: 比评查插入的效率要高
public E getFirst() 拿到集合中 第一个元素
public E getLast() 获取最后一个数据
public E removeLast() 移除最后一个元素
public E removeLast() 移除第一个元素

Vector: 线程安全的, 已经被ArrayList替换,也是以数组的方式来进行存 (了解)

构造方法与 ArrayList 是一样的

独有的方法 :
public void addElement(E obj) 向末尾来添加数据
public E elementAt(int index) 根据索引来获取
public boolean removeElement(Object obj) 删除集合里的对象
Element 都是根据节点来进行操作

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值