JAVA基础之Map接口,遍历,TreeMap,Collections,hash表扩容的理解,线程

1. Map接口

HashMap:底层是哈希表,线程不安全

TreeMap:底层是二叉树,线程不安全

HashMap允许空key和value

2.两种遍历方式:

①先把key值放入set中,遍历set输出value

Set<K> set=map.keySet();

Iterator<K> iterator=set.iterator();

while(iterator.hasNext()) {

syso"iterator.next()";

}


②把key和value看作一个entry实体,得到一个entry实体的set

Set<Map.Entry<E,E>> set=map.entrySet();

Iterator<Map.Entry<E,E>> iterator=set.iterator();

while(iterator.hasNext()){

Map.Entry<E,E> entry=iterator.next();</br>

syso"entry.getKey()+entry.getValue()";</br>

}</br>

#HashMap的底层实现

HashMap:去重,操作的是key,对key去重

#HashMap与HashTable的区别

①HashTable不允许key为null,HashMap允许key为null

②HashTable是线程不安全,HashTable是线程安全

3.TreeMap注意点

①实现了Comparable接口的compareTo()方法,或者实现了Comparator接口的compareTo()方法,因为TreeMap的put方法重写了这两个接口的某一个;

②元素可不可以作为key,跟元素内部的成员没有关系

#可变参数

int…a == int a[]

①:传值的实参可以直接写,个数不限制;

public void sum1(int…a){方法体}

sum1(5,6,4,2,1);//sum1(2,3,4);

②:当方法中出现包括可变参数的多个参数时,可变参数必须放在最后,并且一个方法的参数中只能有一个可变参数

public void sum2(int b,int…a){方法体}

③:当可变参数的方法与固定参数的方法是重载关系时,调用的顺序,固定参数的优先于可变参数的.

public void sum3(int b){方法体}

public void sum3(int…b){方法体}

//sum3(2)–>默认调用第一个无可变参数的方法

4.Collections

按照从短到长排序:

定义一个A类实现Comparator接口,重写Comparator下的compare()方法

Collections.sort(list,new A());

按照从长到短排序:

Comparator comparator1=Collentions.reverseOrder(new A());

Collentions.sort(list,comparator1);

倒叙字典排序:

Copparator comparator2=Collections.reverseOrder();

Collentions.sort(list,comparator2);

5数据结构

数组:内存空间是连续的,查找快,插入删除慢

链表:内存空间是不连续的,查找慢,插入删除快

#哈希表

  • 链地址法

hash表扩容的理解

java默认的散列单元大小全部都是2的幂,初始值为16(2的四次幂)。假如链表中的75%链接有数据的时候,则认为加载因子达到默认值0.75,然后散列单元会扩容为原来的二倍,散列单元中每个地址里存储的数组里的数据会全部重新计算,并存储到新的散列单元;

//Map是接口,一般而言concurrentHashMap是线程安全的

6多线程

程序:可执行文件

进程:一个正在运行的程序

线程:负责程序的运行,通常将进程的工作理解为线程的工作

作用:同一时间干多件事情

任务区:我们将线程工作的地方称为任务区

jvm默认是多线程,最少是两个任务区,一个在main一个在object下的finalize函数

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值