java基础day10:集合、泛型、映射

一、集合Collection<E>

1、定义

数据存储的容器,大小不固定。

Collection集合层次的顶级接口。

<Ē>表示泛型---用于限定元素的数据类型的---而且由于泛型的限定,集合中只能存储引用类型的数据。

2 、集合中的成员

1、List<E>集合-----有序列表

有序集合---指的是保证元素的存入顺序,可以重复添加元素

1.2、常用直接子类
1-顺序表ArrayList<E>

特点:基于数组。默认初始容量为10,每次扩容是在原数组的基础上增加一半。基于右移运算 10->15 ->22.内存空间连续。插入或者删除一个元素相对效率较低,查询元素相对效率比较高。是一个线程不安全的集合.

常用方法
add()向列表添加一个元素
size()获取集合的大小
get()得到索引处的值
toArray()将集合转化成数组
remove()删除元素
set()修改索引处的元素

 ArrayList<String> str = new ArrayList<>();
        str.add("a");
        str.add("b");
        str.add("a");
        str.add("asdd12");
        System.out.println(Arrays.toString(str.toArray()));//[a, b, a, asdd12]
        System.out.println(str.size());//4
        System.out.println(str.get(2));//a
        System.out.println(str.remove("a"));//默认删除第一个符合的元素
        System.out.println(str.remove(1));//删除索引的元素
        System.out.println(Arrays.toString(str.toArray()));//[b, asdd12]
        System.out.println(str.get(0));//b

2-链表LinkedList

特点: ​ 基于链表。用节点(Node)来存储元素。内存空间不连续。插入或者删除元素的效率相对较快,

查询元素效率相对较低。是一个线程不安全的集合

(双端队列)Deque<E>extends Queue<E>(队列

ArrayList和LinkedList的区别
不同点-底层的数据结构不同,ArrayList(基于数组),LinkedList(基于链表)-读数据:某些场景下ArrayList效率高于LinkedList-写(添加/删除)数据:LinkedList效率高于ArrayList
相同点相同点:-都实现List接日-线程不安全的集合

 LinkedList<String> str = new LinkedList<>();
       str.add("aa");
       System.out.println(Arrays.toString(str.toArray()));//aa
       str.push("bb");//压栈,把添加的元素放到第一位
       str.push("cc");//压栈,把添加的元素放到第一位
       System.out.println(Arrays.toString(str.toArray()));//cc bb aa
       str.addFirst("第一");
       str.addLast("最后");
        System.out.println(Arrays.toString(str.toArray()));//[第一, cc, bb, aa, 最后]
        System.out.println(str.pop());//第一
3-Vector向量

特点:是ava中最早的集合。底层是基于数组的。默认初始容量是10,每次扩容一倍。

基于三元运算。是一个线程安全的集合

4-stack 栈

特点:遵循先进后出的原则。向栈中添加元素---入栈/压栈,

将元素从栈中取出---出栈/弹栈,最先放入栈中的元素---栈底元素,最后放入栈中的元素---栈顶元素---底层是用的Vector实现的

2、Set<E>集合-----无序列表

不包含重复的元素

2.1 常用的直接子类

HasheSet

特点:不保证元素的存入顺序

默认初始容量是16,加载因子是0.75f,默认扩容一倍。是一个线程不安全的集底层基于HashMap(映射)。

3、迭代器

Iterator ​ 迭代器,用于迭代遍历集合---在迭代过程中“不允许增删原集合"

Iterable提供了个iterator方法来产生一个Iterator对象。增强for循环本质上在迭代遍历

如果一个对象允许使用增强for循环遍历,则这个对象对应的类必须实现Iterable接口。---JDK1.5的特性之一

案例:

利用迭代器遍历set

HashSet<String> names= new HashSet<>();
names.add("张三");
names.add("李川");
names.add("王五");
//迭代器
//1-先将集合转化为迭代器对象
Iterator<string> iterator =names.iterator();
//2-利用迭代器的方法实现遍历
while (iterator.hasNext()){
​
String next = iterator.next()
System.out.println(next)
}

4、Collections集合工具类

方法意义
sort()默认升序
reverse()将集合的元素反转顺序
shuffle()打乱原来元素的顺序(随机洗牌)

5、Comparator 比较器

比较器。重写compare方法,将比较规则写到compare方法中。

如果返回一个正数,则意味着第一个参数要排在第二个参数后边:如果返回一个负数,则意味着第一个参数要排在第二个参数前边。

如果在排序的时候没有指定比较规则,那么这个时候要求排序的元素所对应的类必须实现comparab重写接口中compareTo万法

二、泛型

对数据类型的泛型化 :(数据类型不确定)

泛型的定义方式 : <大写字母> -----<T><E>;单个字母大写是规范,字母可以自定义<T> 位置: ​ 泛型定义出现在类上----泛型类ArrayList<E>

泛型定义出现在方法上----泛型方法泛型定义出现在接口上----泛型接口List<E>

类/接口:

泛型定义应写到名称后方法:

泛型定义应写到返回值类型前。

泛型被具体类型的替换的过程---泛型的擦除---发生在编译期 ​ ? extends 类/接口---表示这个类/接口及其子类/子接口(上限)

? super 类/接口---表示这个类/接口及其父类/父接口(下限)

?表示通配符 --- List<?>

三、映射----Map<K , V>

1、HashMap

在idk1.8中底层是通过数组+链表+红黑树实现:

当链表个数达到8个时,链表转为红黑树:TREEIEY THRESHOLD =8:

红黑树节点个数小于等于6时,红黑树转为链表:UNTREEIFY THRESHOLD = 6;

在HashMap中由键的哈希值确定放入哪个桶中---允许键或者值为nu11,默认初始容量是16,加载因子是0.75f,每次扩容一倍。是一个异步式线程不安全的映射。

常用方法
put()将键值对添加到映射中
get()传入key值获取对应的value值
keySet()将映射中的所有key以Set集合返回
entrySet()将键值对包装到Entry中返回Set集合---键值对集合

2、HashTable ​ 不允许键或者值为nu11,默认初始容量是11,加载因子是0.75f。是一个同步式线程安全的映射 ​ 3、ConcurrentHashMap

异步式线程安全的映射

jdk1.5:

JUC->Java Util Concurrent java的并发工具集

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值