JAVA基础笔记——集合框架

集合框架:

特点:
1.只用于存储对象
2.长度可变
3.可以存储不同类型的对象

集合框架图:

这里写图片描述

Collection:集合接口
list:集合子接口,元素有序可重复(因为有索引)
—-ArrayList:
底层数据结构是数组,查询速度很快,增加、删除速度慢,线程不同步
—-LinkedList:
底层数据结构是·链表,查询速度慢,增加、删除速度快
—-Vector:
底层数据结构是数组,线程同步,被ArrayList替代了(jdk1.1)

set:集合子接口,元素无序不重复,是唯一的
—–HashSet:底层数据结构是哈希表
如何保证元素唯一性:
是依据元素的hashcode()、equals()来完成的
如果hashcode()值相同,才会判断equals()是否为true
如果hashcode()值不同,不会判断equals()方法
注意:当判断元素是否存在,删除元素时,都会判断这两个方法

—–TreeSet:底层数据结构是二叉树
如何保证元素唯一性:
compareTo()方法返回0.

可以对集合中的元素排序:

第一种排序方法:自然排序
实现comparable接口,覆盖compareTo()方法

第二种排序方法:当第一的元素不具有比较性或者所具有的比较性不是所需要的,这时需要让容器自身具有比较性

注意:当要对自定义数据进行排序时,当主要条件相同,需要对次要条件    进行排序。

泛型:JDK1.5以后出现的新特性,用于解决安全问题,是一个安全机制

好处:

1.将运行时期出现的问题ClassCastException,转移到了编译时期,方便程序员处理问题,让运行时问题减少,安全。
2.简化书写,避免强制转换

泛型的使用:

泛型类:
当类中要操作的引用数据不确定时,早期定义Object来完成扩展,现在使用泛型完成扩展
class Utils {

}

泛型接口:
interface A {}

泛型方法:
为了让方法操作多种数据类型,而且类型还不确定,可以使用泛型方法,操作多种类型

public void show(T t) {}

public static void show(T t) {} (注意T使用的位置)

泛型限定:
泛型使用时两边类型要一致,不能接受继承类
如:ArrayList al = new ArrayList();

? 通配符,也可理解为占位符
? extends E:可以接收E和E的子类(上限)
? Super E:可以接收E可E的父类(下限)

集合Map:存放键值对,一对一对往里存,保证键的唯一性(和Set很像,其实Set底层就使用了Map集合)

——hashTable:底层是哈希表数据结构。不允许存入null键null值,线程同步,效率低。
——hashMap:底层是哈希表数据结构。允许存入null键null值,线程不同步,效率高。
——TreeMap:底层是二叉树数据结构。可以对集合中的键进行排序。

Map集合的两种取出方式:
1.
map.ketSet():将map中所有的键存在Set集合中,迭代Set集合中的所有键,通过get()取出每一个键对应的值。

Set<Student> set = map.keySet();
        Iterator<Student> it = set.iterator();
        while(it.hasNext()) {
            Student stu = it.next();
            String addr = map.get(stu);
            System.out.println(stu.getName()+" "+stu.getAge()+"  "+addr);
        }

高级for:

Set<Student> set = map.keySet();
for(Student stu:set) {
            String addr = map.get(stu);
            System.out.println(stu.getName()+" "+stu.getAge()+"  "+addr);
        }

2.
map.entrySet:将Map集合的映射关系存入Set集合中,这个关系类型就是Map.Entry,然后遍历Set集合,通过getKey()、getValue()取出对应的键值对。

Set<Map.Entry<Student, String>> entrySet = map.entrySet();
        Iterator<Map.Entry<Student, String>> iter = entrySet.iterator();
        while(iter.hasNext()) {
            Map.Entry<Student, String> en = iter.next();
            Student key = en.getKey();
            String value = en.getValue();
            System.out.println(key.getName()+" "+key.getAge()+" "+value);
        }

高级for:

for(Map.Entry<Student, String> en:map.entrySet()) {
            Student key = en.getKey();
            String value = en.getValue();
            System.out.println(key.getName()+" "+key.getAge()+" "+value);
        }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值