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

1. Map接口

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

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

HashMap不允许空key和value

map.put()返回null; 如果key相同,value会被覆盖返回html

2.两种遍历方式:

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

Set set=map.keySet();

Iterator 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();

syso"entry.getKey()+entry.getValue()";

}

#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函数

上一篇:wxParse遇到的问题


下一篇:小程序开发中跨页面传值;使用wxparse还原html