集合框架

  1. 常见的数据结构
  1. 数组(ArrayList)
  2. 链表(LinkedList)
  3. 堆栈(栈) 特点 FILO
  4. 队列 FIFO
  1. 集合框架的体系
  1. 继承体系

Collection(所有集合类接口的超级接口)

|--List:特点 有序(添加的顺序)可以重复的数据

|--ArrayList  :查询和修改效率高,但是删除和插入效率低。(线程不安全)

|--LinkedList :插入和删除效率高 (线程不安全)

  |--Vector       : 线程安全

  1. 如何选择

到底怎么使用如何选择:

1.有序(添加的顺序)可以重复的数据

2.如果查询和修改的频率高-ArrayList

3.如果插入删除频率高-LinkedList

4.如果要求线程安全 Vector

 

  1. ArrayList
  1. 多查询API
  2. 基本数据的维护 常用的CRUD 方法
  3. 集合的遍历

1.for

2.增强for循环

3.迭代器

1.单向迭代器

Iterable 接口  有接口方法

Iterable 接口  有接口方法   Iterator<T> iterator();

返回一个Iterator

 

Iterator

hasNext() 是否有下一个(不会移动指针)

next()  返回下一个元素(要移动指针)

remove() 删除下一个元素

注意:如果尚未调用 next 方法,或者在上一次调用 next 方法之后已经调用了 remove 方法

ConcurrentModificationException:不能在迭代过程中对数据源进行改变

2.双向迭代器

listIterator

是List下面的方法

所有的list的实现类都可以获取 这个对象

  1. LinkedList
  1. 多查询API
  2. 基于数据结构的不同,他提供了很多操作头 和尾的方法
  1. 使用的大环境:无序(添加的顺序)、不重复
  2. HashSet
  1. 判断重复的标准

hashCode():(hashCode的值有课能会重复)

equals():

自己创建的类要去比较是否重复,需要覆写上面的方法

 

 

HashSet : 排序就是一种假象(不具备排序功能)

  1. hashCode&&equals

hashCode  

[2018699554, 366712642, 1829164700, 1311053135]

 只是覆写 了hashCode 还是会添加四个对象

equals比较

   覆写equals

  添加了一个对象

源码

public int hashCode() {

         return Integer.hashCode(value);

     }

    

     public boolean equals(Object obj) {

         if (obj instanceof Integer) {

             return value == ((Integer)obj).intValue();

         }

         return false;

     }

  1. 根据自己的业务场景决定覆写方法的逻辑
  1. TreeSet
  1. 有排序的功能

Comparator 用于自定义比较器

Comparable 自然排序

  1. Comparator用于自定义比较器

public interface Comparable<T> 此接口强行对实现它的每个类的对象进行整体排序

   |-- int compareTo(T o)   比较此对象与指定对象的顺序。

   比较此对象与指定对象的顺序。如果该对象小于、等于或大于指定对象,则分别返回负整数、零或正整数。 -1、0 或 1

  

 自己定义的类 必须实现Comparable 接口

覆写 compareTo(T o)--里面的逻辑需要自己定义

 根据实际的业务场景定义排序的逻辑

  1. Comparable 自然排序

TreeSet(Comparator c)  构造一个新的空 TreeSet,它根据指定比较器进行排序。

  Comparator(接口)

  |--int compare(T o1, T o2)  比较用来排序的两个参数。

 

  Comparator:自定义比较器 ,自己定制 和要比较的类的对象 源码无关

  1. 往集合中放的时候  TreeSet(Comparator<? super E> comparator)

 

  1. 集合的体系

c22cec2184669eb782b7a24d2062c4485fb.jpg

  1. map常用方法
  1. CRUD

C:put(K key, V value)
          将指定的值与此映射中的指定键关联(可选操作)。

R:get(Object key)
          返回指定键所映射的值;如果此映射不包含该键的映射关系,则返回 null。

U:增加两次  key不变

D:remove(Object key)
          如果存在一个键的映射关系,则将其从此映射中移除(可选操作)。

 

  1. 遍历方式
  1. 使用Set<Entry>

Set entrySet = map.entrySet();

for (Object object : entrySet) {

Entry e = (Entry) object;

System.out.println(e.getKey()+"--"+e.getValue());

}

 

  1. 使用keySet 方法

Set keySet = map.keySet();

for (Object object : keySet) {

System.out.println(object+"--"+map.get(object));

}

  1. 接口
  1. HashMap
  2. TreeMap
  3. 判断key重复的标准  和 HashSet 、TreeSet一样
  1. Collections工具类

都是static修饰的 ,多使用

  1. Properties
  1. 是一种特殊的hashTable
  2. 使用场景:读取电脑上配置文件

先了解 ,后面io会讲的详细点

  1. 泛型
  1. 建议:多使用泛型
  2. 泛型类的定义

T (类型)

K (key)

V (值)

E (元素)

不支持基本数据类型

 

  1. 泛型的上下限(读API)

?号  :表示通配符,不确定的类型,可以表示任意类型【? extends Object】 ;

? extends Number :表示通配符?的上限 ,必须是Number及Number的子类

? Super   Number: 表示通配符 ?的下限,必须是Number及Number的父类

  1. hashMap的底层原理

3bb6f77abc8d0c599d56aaec79d5e005041.jpg

 

 

转载于:https://my.oschina.net/u/4083693/blog/3026713

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值