Java数组
2021-06-23 05:03
标签:-128 inter 定义 size 空间 treeset out highlight 地址 2018/09/19 数组:Array( Arrays 数组的工具类) 集合: 关于==和equals Java数组 标签:-128 inter 定义 size 空间 treeset out highlight 地址 原文地址:https://www.cnblogs.com/zhangxuuy/p/9674638.html
java高级之数组及扩展
01.在内存中开辟一连串的空间
02.保存相同数据类型的集合
03.便于我们查询 因为有下标(索引)
04.增删的效率低,因为元素之后的数据都要改变
05.长度一旦被定义,不允许被改变
链表:
01.查询效率低
02.增删的效率高
03.分为单向,双向(互相链),循环(首尾链)
Collection(集合的工具类:Collections)
List public interface List
ArrayList:
01.采用数组的形式来保存数据,默认10,每次扩充是1.5倍(有关于位移的内容)
02.查询的效率高(因为有下标)
03.增删的效率低(牵一发而动全身)
LinkedList:
01.采用的是链表结构
02.查询的效率低
03.增删的效率高
Set public interface Set
存储的是唯一且无序的对象!
HashSet:
为什么Set存储的值是唯一的?
01.底层实现其实是HashMap
02.hashSet.add() 底层是hashMap.put()
public boolean add(E e) {
return map.put(e, PRESENT)==null;
}
03.把我们新增的元素作为了map的key进行存储了
HashMap的key怎么唯一的?
分析:
p.hash == hash &&((k = p.key) == key || (key != null && key.equals(k)))
01.首先认识到一点:两个字符串的内容一致,hashCode绝对一致,
两个字符串的内容不一致,hashCode有可能一致
02.hash算法是效率最快的(比较字符串内容)
03.如果hash不一致,后续判断压根没必要执行
04.如果hash一致,还有可能内容不一致,所以继续判断
05.再比较内存地址,如果地址一致,证明内容一致,后续判断不执行
如果地址不一致,后续判断继续执行
06.实在没办法了,只能使用效率最低的equals
TreeSet:
可以排序
Map public interface Map
HashMap
TreeMap
==比较的是地址
equals比较的是值
eg:
String a="abc";
/**
* 01.在栈中开辟空间存储a
* 02.拿“abc”字符串去常量池中查询有没有,没有(第一次创建)
* 03.在常量池中开辟空间存储"abc"
* 04.栈中的a就指向了常量池中的"abc"地址
*/
String b="abc";
/**
* 01.在栈中开辟空间存储b
* 02.拿“abc”字符串去常量池中查询有没有,有
* 03.在常量池中不会开辟空间存储
* 04.栈中的b就指向了常量池中的"abc"原有地址
*/
String c=new String("abc");
/**
* 01.在栈中开辟空间存储c
* 02.拿“abc”字符串去常量池中查询有没有,有
* 有:直接去堆中开辟空间保存"abc"
* 没有:在常量池中开辟空间存储"abc",之后再去堆中开辟空间保存"abc"
* 03.栈中的c指向了堆的"abc"
*
*/
String d=new String("abc");
/**
* 01.在栈中开辟空间存储d
* 02.拿“abc”字符串去常量池中查询有没有,没有,不用管堆中有没有
* 03.栈中的c指向了堆的"abc"
*
*/
System.out.println(a==b); //true
System.out.println(a==c); //false
System.out.println(c==d); //false
//如果是equals则都相等
关于integer
-128 127 存在常量池中,超出存在堆中