Java day8

一:开发一个数据结构:保存数据和操作数据。

任务:可以存放任意类型任意个数的可重复的有序数据。
数据结构底层:可以采用数组和链表来实现。
调用者:不关心底层是怎么做。对数据进行增删改查的操作。
对于操作者不需要关心底层采用什么实现的,
只需要采用统一的接口完成相同的事情。----》定义规范。
定义标准(规范):可以采用接口和抽象类。
标准一:提供数据增删改查的规范
对数据进行增删改查:通用的操作—》定义标准
public interface List{
public void add(int index,Object o);
//在最后增加对象
public void add(Object o);
public Object remove(int index);
public Object get(int index);
public int size();
public void set(int index,Object o);
public Iterator iterator();
}
标准二:
遍历元素:迭代器
public interface Iterator{
//判断是否有下一个数据
public boolean hasNext();
//取下一个数据
public Object next();
//删除迭代器中最后一个数据
public void remove();
}
实现三:实现List(数组和链表)
//数组
class ArrayList implements List{
}
//链表
class LinkedList implements List{
}

com.briup.collection

二:集合

1)java版的数据结构(对数据进行增删改查的操作)
2)集合框架是别人做好的东西,直接使用就好了。
3)集合只能够保存对象.
基本数据类型的包装类:重要性,
因为集合中只能添加对象,不能添加基本数据类型
4)数组也可以对数据进行增删改查的操作。
但是需要自己封装方法。
集合可以简化代码。

三:集合框架的组成,所在的包java.util包中。

1)接口:定义需要实现的抽象方法。
2)实现类:将接口中的方法实现,如ArrayList,Hashtable等
3)算法:存放和操作数据的算法。如哈希算法,红黑树算法…

四:集合的层次结构

a):保存单值
Collection:定义保存单值的规范
——Set:定义保存不可重复无序单值的规范
———HashSet:哈希算法保存数据,检索效率最高的
———SortedSet:定义在Set基础上进行排序的规范
———TreeSet:实现排序规则
——List:定义保存可重复有序单值的规范
——LinkedList:使用链表实现List接口
——Vector:使用数组实现List接口,线程安全的
——ArrayList:使用数组实现List接口,线程不安全

b)保存键值对(key—value)
Map:定义保存键值对的规范(key不能重复,value可重复)
————HashMap:是线程不安全,效率高,HashMap允许null key和null value,
————HashTable:是线程安全,Hashtable不允许null key和null value,
——SortedMap:定义在Map的基础上进行排序的规范(根据key排序)
————TreeMap:对map进行排序

五:增强for循环

a)之前的for循环
for(初始化变量;循环条件;变量的控制){
循环体
}
b)增强for循环:方便遍历集合和数组
for(type element : array){
循环体
}
type:数组或集合中数据的数据类型
element:临时变量
array:数组或集合的引用
注意:增强for遍历的集合必须是实现Iterable接口。
不能明确指出数据的下标(位置)

六:set添加元素的时候,如何判断两个对象是否相等?

1)先比较hashCode的值,如果hashCode的值不相等,
不会比较equals方法,直接返回两个对象不相等。
2)先比较hashCode的值,如果hashCode的值相等,
再比较equals方法,如果equals比较两个对象不相等,
返回这两个对象不相等。

七:如何判断元素应该添加在set集合的那个地方?(hashCode的作用)

1)使用哈希算法可以提高检索的效率。
哈希算法底层有一张哈希表。哈希表相对于数组。
哈希表的长度根据算法自己的计算出来的。
2)底层使用哈希算法决定对象所存放的位置
所放的位置=通过对象的hashCode%哈希表的长度
一个对象默认hashCode值是由对象的地址根据一定算法计算而得出来的。
set中添加元素判断对象是否相同需要重写hashCode方法和equals方法
如何重写hashCode方法:在java.lang.Object中
重写hashCode方法建议:每个不同的对象放在不同的位置
将所有会影响判断对象是否相同的
属性的hashCode值相加。
public int hashCode(){
//return 1;
return 所有的属性的hashCode值相加;
}

八:TreeSet,TreeMap排序:

1)自然排序:将需要排序的类实现java.lang.Comparable
public class Student implements Comparable{
public int compareTo(Object obj){
…排序规则
}
}
2)覆盖排序:创建TreeSet,TreeMap对象指定排序规则。
当该类无法指定自然排序,就只能使用覆盖排序。
如final String类不能用自然排序,只能用覆盖排序。
interface java.util.Comparator{
public int compare(Object o1,Object o2){
…排序规则
}
}
******覆盖排序的优先级高于默认排序
Set set = new TreeSet();
set.add(“b”);
set.add(“a”);
set.add(“d”);
set.add(“c”);

***该代码有没有问题?如果没有问题输出什么内容?
如果有问题如何修改?

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值