集合框架

集合框架

面向对象语言对事物的体现都是以对象的形式,为了方便对多个对象的操作,Java提供了集合类。
数组和集合的区别
(1): 长度区别:
数组的长度是固定的而集合的长度是可变的
(2): 存储数据类型的区别:
数组可以存储基本数据类型 , 也可以存储引用数据类型; 而集合只能存储引用数据类型
(3): 内容区别:
数组只能存储同种数据类型的元素 ,集合可以存储不同类型的元素
集合继承体系
在这里插入图片描述

一、Collection集合的功能

在这里插入图片描述

二、List集合

元素有序,存取顺序一致,,并且每一个元素都存在一个索引.元素可以重复。
特有功能
void add(int index,E element): 在指定索引处添加元素
E remove(int index):移除指定索引处的元素 返回的是移除的元素
E get(int index):获取指定索引处的元素
E set(int index,E element):更改指定索引处的元素 返回的而是被替换的元素
ListIterator的特有功能
ListIterator 继承自Iterator 可以使用Iterator中的方法
boolean hasPrevious(): 是否存在前一个元素
E previous(): 返回列表中的前一个元素
注:可以实现反向遍历,完成反向遍历之前 ,要先进行正向遍历(直接反向遍历没有效果,指针默认位置就在最前面,没有元素)

三、数据结构

数据结构是存储数据的格式,分类: 栈 , 队列 , 数组 , 链表 , 树 , 哈希表
栈特点: 先进后出
队列: 先进先出
数组特点: 查询快 , 增删慢
链表特点: 查询慢 , 增删快
List的三个子类的特点
ArrayList:
底层数据结构是数组,查询快,增删慢。
线程不安全,效率高。
Vector:
底层数据结构是数组,查询快,增删慢。
线程安全,效率低。
LinkedList:
底层数据结构是链表,查询慢,增删快。
线程不安全,效率高。

(一) ArrayList的特有功能

List接口的可调整大小的数组实现。实现了所有的可选列表操作,并允许所有的元素,包括 null。除了实现 List接口,这个类提供了操纵的阵列,用于内部存储列表的大小的方法。是不同步的。
在这里插入图片描述

(二) Vector的特有功能

实现了一个可增长对象数组。Vector 是同步的。
public void addElement(E obj) 添加指定的组件到这个向量的结束,增加其大小由一个。
public E elementAt(int index) 返回指定索引处的组件。
public Enumeration elements() 返回此向量的组件的枚举。

(三) LinkedList的特有功能

List 接口的链接列表实现 , 此实现是不同步的。
public void addFirst(E e) 在此列表的开始处插入指定的元素。
addLast(E e) 将指定的元素列表的结束。
public E getFirst() 返回此列表中的第一个元素。
getLast() 返回此列表中的最后一个元素。
public E removeFirst() 移除并返回此列表中的第一个元素。
removeLast() 移除并返回此列表中的最后一个元素。

四、泛型

是一种把类型明确的工作,推迟到创建对象,或者调用方法的时候才去明确的特殊的类型。
参数化类型:把类型当作参数传递。
泛型的格式:<数据类型> -------只能是引用数据类型
优点:
(1): 把运行时期的问题提前到了编译期间
(2): 避免了强制类型转换
(3):优化了程序设计,解决了黄色警告线
注意:只在编译期有效 ,在运行期就擦除了

public class MyClass2<M> {
    private M m;
    public M getM() {
        return m;
    }
    public void setM(M m) {
        this.m = m;
    }
------------------------------------------------------------
public class MyDemo2 {
    public static void main(String[] args) {
        MyClass2<String> stringMyClass2 = new MyClass2<>();
        stringMyClass2.setM("abc");
        String m = stringMyClass2.getM();
        System.out.println("----------------------------------");
        MyClass2<Integer> integerMyClass2 = new MyClass2<>();
        integerMyClass2.setM(100);
        Integer m1 = integerMyClass2.getM();
        System.out.println(m1.intValue());
    }
}

泛型高级
泛型通配符<?>: 任意类型,如果没有明确,那么就是Object以及任意的Java类了
? extends E: 向下限定,E及其子类
? super E: 向上限定,E及其父类

增强for循环
for(元素数据类型 变量 : 数组或者Collection集合) {
使用变量即可,该变量就是元素
}
可变参数
定义方法的时候不知道该定义多少个参数
格式: 修饰符 返回值类型 方法名(数据类型… 变量名){}public int demo(int... a){}

*注意事项:*这里的变量其实是一个数组
如果一个方法有可变参数,并且有多个参数,那么,可变参数肯定是最后一个
Arrays工具类的asList()方法的使用
Arrays工具类的asList(T… t)方法的使用: 将数组转换成集合
注意事项: 得到的集合长度是不可变的 你不能往这个转换后的集合中 添加元素(add) 和 删除元素(remove)
只能获取元素(get)

五、Set集合

特点是元素不能重复
HashSet: HashSet 元素无序(存取顺序不一致) 元素不重复, 底层数据结构是哈希表,线程不安全效率高。靠元素重写hashCode方法和equals()方法来保证元素唯一性。底层利用HashMap来存储元素
LinkedHashSet:底层数据结构有两个,链表(保证有序)和哈希表(保证唯一),线程不安全效率高。
TreeSet: 底层数据结构是二叉树,特点是能够对元素进行排序。分为自然排序和比较器排序。
自然排序:采用空参构造,那么使用的就是自然排序,要求排序元素必须实现Compareble接口,重写此接口中的 compareTo() 方法。(根据此方法的反回值的正负0 来决定元素在二叉树中 是往左边放 还是右边放,还是不往里面放)
比较器排序:采用的是有参构造,参数要一个比较器,TreeSet(Comparator < ? super E > comparator),构造一个新的空 TreeSet,它根据指定比较器进行排序。

        接口 Comparator<T >
        int compare (T o1, T o2)
        //比较用来排序的两个参数。

六、Map集合

将键映射到值的对象,一个映射不能包含重复的键,每个键最多只能映射到一个值。
和Collection的区别:
Map是双列的,Collection是单列的
Map的键唯一,Collection的子体系Set是唯一的
Map集合的数据结构针对键有效,跟值无关;Collection集合的数据结构是针对元素有效
在这里插入图片描述
HashMap: 允许插入null键,null值,键唯一 注意重写hashCode方法 和 equals 方法。
LinkedHashMap: Map 接口的哈希表和链接列表实现,具有可预知的迭代顺序。底层的数据结构是链表和哈希表 元素有序 并且唯一。元素的有序性由链表数据结构保证,唯一性由哈希表数据结构保证。Map集合的数据结构只和键有关。
**TreeMap:**不允许插入null,键的数据结构是红黑树,可保证键的排序和唯一性 。 排序分为自然排序和比较器排序, 线程是不安全的效率比较高。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值