区别一:
1.list和map有相同的父类,map没有
区别二:
1.list可以添加重复,set不可以添加重复(对象类型除外)
2.list可以有多个null,set只能有一个(本质上就是第一条区别)
3.map不能出现重复的键,当出现重复时,键值将被最后一次覆盖,键值可以为对象
arrylist和linklist的区别
1.arrylist:顺序存储
2.linklist:链式存储
顺序存储:存储密度大,存储在一篇连续的空间上,增删慢
链式存储:存储密度低,不一定连续,增删快
若是加入对象时,相同内容的对象进行屏蔽的方法:
重写hashCode和equals(重写equals必须重写hashCode)
hashCode和equals的方法规范
规范1:若重写equals(Object obj)方法,就必要重写hashcode()方法,确保通过equals(Object obj)方法判断结果为true的两个对象具备相等的hashcode()返回值。
说得简单点就是:“如果两个对象相同,那么他们的hashcode应该 相等”。
不过请注意:这个只是规范,如果你非要写一个类让equals(Object obj)返回true而hashcode()返回两个不相等的值,编译和运行都是不会报错的。不过这样违反了Java规范,程序也就埋下了BUG。
规范2:如果equals(Object obj)返回false,即两个对象“不相同”,并不要求对这两个对象调用hashcode()方法得到两个不相同的数。说的简单点就是:“如果两个对象不相同,他们的hashcode可能相同”。
上转型,下转型(假设存在父类Child ,Student为Child的子类)
1.上转型:
1)实例化出来的对象不具有子类特有的方法
2)调用方法时,调用的为子类重写的方法
Child child = new Student();
2.下载型
将父类强转为子类
Student studnet =(Student)new Child();
补充:
instanceof
语句: 对象名 instanceof 类名
判断对象是不是这个类或者是这个类的子类
map常常和list一起使用,在list中加入map
map的适应
Map<键的类型,键值的类型> map名=new hashMap<>()
Map<键的类型,键值的类型> map名=new treeMap<>()
键值的类型一般使用object,这样就可以添加多种书库类型了
Map<String,Object> map=new hashMap<>()
map.put("name":"zhangsan")
map.put("age":18)
map.get("name") //用于输出,写入键值就可以得到对应的键值
map.KeySet();//获得键值的集合