java基础笔记(七)

1.数据结构

1.堆栈结构 特点:先进后出

2.队列结构 特点:先进先出

3.数组结构 查询快 增删慢

4.链表结构 查询慢 增删快

5.哈希表结构:(数组结构+链表结构) 查询较快 增删较快

堆栈结构~队列结构
数组结构~链表结构
哈希表结构

2.List接口的特点

a.有下标
b.有序的(有序不是自然顺序,不是123,abc,有序指的是存和取的顺序一致)
c.可重复

实现类:
ArrayList,LinkedList,Vector
ArrayList:底层采用数组结构,查询快,增删慢
LinkedList:底层采用链表结构,查询慢,增删快
Vector:底层采用数组结构,查询快,增删慢(现在用的少了)

List结构中具有的方法:

增: add(E e);add(int index,E e);
删: remove(Object obj);remove(int index);
改: set(int index,E e);
查: get(int index);
其他方法有:
size(),clear(),contains(Object obj),toArray() ,iterator(),isEmpty()

实现类的方法:

1.ArrayList:方法基本和List中定义的一模一样
2.LinkedList:除了和List接口中一样的方法之外

3.Set接口的特点

a.无下标
b.无序的(无序指的是存和取的顺序不一定一致,LinkedHashSet和TreeSet除外)
c.不可重复

实现类:HashSet,LinkedHashSet,TreeSet
HashSet:底层采用哈希表结构,查询快,增删快,无序的
LinkedHashSet:底层采用 链表+哈希表,查询快,增删快,有序的
Set接口中的特有方法:没有,和父接口Collection基本一模一样

实现类:
HashSet和LinkedHashSet中的方法基本和Set接口一模一样

4.对象的哈希值

任何对象,都有一个哈希值,哈希值是对象的一个数字表示
对象的字符串表示,toString方法,默认表示格式:包名.类名@地址值

1.如果获取对象的哈希值?
每一个对象都有一个方法,hashCode方法,这方法定义在了Object类中,所以每个对象都具有

2.我们以前说的地址值,实际上根本不是地址值,而是哈希值的16进制

3.在java中怎么看真正的地址值? 答案是----看不了

4.哈希值的由来
是由真正的地址值计算的,通过一种散列算法(哈希算法)
所以 一般来说 地址值 不一样, 哈希值也是不一样的

5.不可逆算法(MD5,WPA2)

6.碰撞算法(一个一个式)

7.暴力破解&字典破解(破解wifi教程)

5.字符串的哈希值

只要字符串内容一样,哈希值 必定一样
两个字符串的内容不一样,哈希值可能一样

		String s1 = new String("abc");//0x111
		String s2 = new String("abc");//0x222
		
		System.out.println(s1==s2);//== 比较的就是真正的地址值,false
		
		System.out.println(s1.hashCode()==s2.hashCode());//true
		
		System.out.println(s1.equals(s2));//true,比较内容

哈希表结构,判断元素是否重复的原理:

1.先判断 新元素的哈希值 和 所有旧元素的哈希值是否相同
如果都不相同,直接判断不重复,添加

2.再调用 新元素 和 哈希值相同的旧元素的equals方法 如果返回是true 判定重复元素 ,不添加 如果返回是false 判定不重复,添加

总结: 只有哈希值相同,并且equals返回true,才判定重复

定义一个标准的类:
    1.封装(private+get/set)
	2.构造(无参+全参)
	3.toString(快速打印对象信息)
 	4.hashCode和equals(保证元素使用哈希表结构存储时的唯一性)

contains方法,判断是否包含某一个元素

ArrayList的contains方法:
names.contains(“abc”);//判断 names集合中是否包含 “abc”
只比较 equals的返回值,如果某一个元素和要判断的元素equals方法true,那么就是包含该元素

HashSet的contains方法:原理和add方法一样
set.contains(“abc”);// 先判断哈希值
再使用equals方法 只有旧元素和判断的元素 的哈希值相同 并且 euqals方法true 才判定包含

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值