二、java.util.Collections

一、Map
1.java.util.Map<K,V>接口

<K,V>分别是代表key的类型,和value的类型

储存键值对(Key,value)

2、Map的方法们

(1)添加

V put(K key, V value):添加一对映射关系

void putAll(Mao<? extends K, ? extends V> m)把另一个map中的所有映射关系,添加到当前的map中来

(2)删除

void clear()

V remove(Object key):根据key删除一对键值对,连着key和value一起删除

(3)修改

重新put

不能修改key,也千万不要修改key ==> 我们实际开发中,一般使用String,Integer当key,因为他们不可变。
如果key是其他类型,千万注意,不要修改key的属性(成员变量),特别是和hashCode和equals,compare等有关的属性

(4)查询

V get(Obejet key):根据key获取value

booLean isEmaty():判断是否为空

boolean containsKey(Object key):判断是否包含某个key

boolean containsValue(Object value):判断是否包含某个value

int size():获取有限键值对的个数

(5)遍历

和collection系列的不用,它只能用一下几种方式b遍历

Collection values() :遍历所有的value,此时没有key的信息
Set keySet():遍历所有的key,这里没有直接的value值,但是可以通过get(key)的方法获取value
Set<Map.Entry<K,V>> entrySet() :遍历所有的(key,value)键值对

3、Map的常见实现类们

(1)HashMap:哈希表:允许key,value为null。
底层实现:JDK1.8之前 数组 + 链表, JDK1.8之后 数组 + 链表/红黑树,遍历的顺序不能保证添加顺序
(2)Hashtable:哈希表:不允许key和value设置为null。
底层实现:数组+链表
(3)LinkedHashMap:是HashMap的子类,比HashMap多维护了(key,value)的添加顺序,遍历的顺序和添加的顺序一致
(4)TreeMap: 它的特点在于,按照key的“大小”顺序排列,所以,
要么key实现java.lang.Comparable接口,
要么在创建TreeMap时,指定一个java.util.Comparator接口的实现类对象,
(5)Properties: Properties它是Hashtable的子类,它的特点:要求,key和value必须是String类型。
通常用于存储系统属性的(key,value)
(7)ConcurrentHashMap:的线程安全是分段锁,效率高

4、Set和Map的关系

HashSet:
底层是HashMap
TreeSet:
底层是TreeMap
LinkedHashSet:
底层是LinkedHashMap

二、java.util.Collections

1、public static boolean addAll(Collection<? super T> c, T… elements)
2、public static int binarySearch(List<? extends Comparable<? super T>> list, T key)
二分查找:要求有序,如果无序,需要先sort排序

public static int binarySearch(List<? extends T> list,T key,Comparator<? super T> c)

3、public static <T extends Comparable<? super T>> void sort(List list)
public static void sort(List list, Comparator<? super T> c)

4、public static void copy(List<? super T> dest, List<? extends T> src)
5、public static boolean disjoint(Collection<?> c1, Collection<?> c2):是否元素完全不同

6、public static <T extends Object & Comparable<? super T>> T max或min(Collection<? extends T> coll)
public static T max或min(Collection<? extends T> coll, Comparator<? super T> comp)

7、public static void reverse(List<?> list):反转
8、public static void shuffle(List<?> list):洗牌

9、public static Comparator reverseOrder():返回一个逆序的比较强,
一般是配合sort, max等涉及到比较大小的方法一起使用。

10、public static void swap(List<?> list,int i, int j):交换[i]和[j]位置的元素
11、static List synchronizedList(List list) :把一个线程不安全的List,转为线程安全的List
多个重载方法
12、public static List unmodifiableList(List<? extends T> list):把一个List变为只读
多个重载方法

三、动态数组

1、逻辑结构:线性的

物理结构:顺序结构
申请内存:一次申请一大段连续的空间,一旦申请到了,内存就固定了。
存储特点:所有数据存储在这个连续的空间中,数组中的每一个元素都是一个具体的数据(或对象),所有数据都紧密排布,不能有间隔。
2、我们要手动实现一个动态数组的容器的设计

四、链式存储结构

1、逻辑结构:有线性的和非线性的
2、物理结构:不要求连续的存储空间,例如:链表、树、图等
链表:单链表、双链表、循环单链表
树:普通的树(不限制分支)、二叉树
图:一个结点对应多个结点

3、存储特点:数据必须封装到“结点”中,结点包含多个数据项,数据值只是其中的一个数据项,其他的数据项用来记录与之有关的结点的地址。

结点:
单链表:
class Node{
Object data; //存储数据本身
Node next; //next是一个变量,该变量存储某个对象地址,这个对象的类型是Node类型。记录的是下一个Node的地址
}

双链表:
class Node{
Node prev;
Object data; //存储数据本身
Node next;
}

二叉树:
class Node{
Node parent; //父节点
Node left; //左结点
Object data; //存储数据本身
Node right; //右结点
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值