集合: 简述collection、list、set、map存储数据的方式。 Collection存储一组无序,不唯一的对象。 List、不唯一,有序。Set唯一无序。Map:键值对的方式。 2:Arraylist和Linkedlist的区别 (1)存储方式不同:A实现了基于动态数组的结构,内存中分配连续的空间,遍历和随机访问元素效率较高。L采用链表存储方式,插入和删除元素效率较高。 3:list,set,map的区别: List:对象不唯一;可以插入多个null元素;是一个有序容器,保持了输出顺序就是插入顺序。常用的实现类:Arraylist和linkedlist Map:map不是collection的子接口或者实现类,是一个接口。 map元素都有两个对象,键值,值可能相同,但是键必须唯一。 map里面可以放随意多的null值,但只能有一个null键。 Set:不允许重复对象。无序容器。Treeset通过comparator和comparable只允许一个null对象。 4:Hashset如何保证数据的唯一性: 底层数据结构是哈希表,(元素是链表的数组)。 哈希表依赖于哈希值存储。添加功能底层依赖于两个方法。Int hashCode和boolean equals(Object obj). 5:常用的异常: 数组越界异常,异常,算术错误清形:ArithmeticException NullpointException空指针异常classNotfoundException不能加载的类。IllllegalArgumentException方法接受到非法参数。 Numberformat(格式)Exception数据格式转换异常 Classcast(投,转向)Exception类不能加载异常。 6:和equals的区别: 比较的是堆内存中引用数据类型的内存地址。比如: String a=“cds”,string b=”cds”;那么他两个用就会返回true。 因为a和b 是被存放在一个字符串池的内存里面,如果b是被new出来的同样的字符串,则就会报错了。因为地址不同,new出来的是放在了引用数据里面了 Equals方法是String类从他的超类object中继承的,检测两个对象是否相等,即内容是否相等,区分大小写。Equals源码其实也是用object中的实现的,而string里面的equals使用比较长度,比较字符数组进行实现的,inteager中的又不一样,是在-128到127内可以比较,超过了就用equals比较才有效。 其实就是==比较的是地址,equals比较的是值,new出的对象其实是比较地址,如果非要比较对象时可以重写equals方法。
treeset和hashset和linkedHashset的区别: Hashset:时无序的。 建立基本数据类型的对象时,利用hash值保证数据唯一(系统自带的,可以重写,可以不重写)。 建立new出的类为对象时,需要利用重写hashCode和equals方法才能够判断出它的唯一性。 LinkedHashSet:linked保证插入顺序和输出顺序一致。 在建立基本数据类型的对象时,利用hash值保证数据唯一。 建立new出的类为对象时,需要利用重写hashCode和equals方法才能够判断出它的唯一性。 Treeset:自带红黑树功能,所以 在建立基本数据类型的对象时,那么红黑树保证有序(真正意义的有序不是插入顺序),红黑树保证唯一。 建立new出的类为对象时,需要重写comparaTo和comparable实现类保证唯一和有序。 Hash表中的hashCode和equals方法的原理: 1:如果重写了equals方法,返回true,则有必要重写hashCode方法。【(当我们在对一个对象之间比较时,才需要重写equals方法,其实并不是非要重写hashcode才行,这只是一条规范,如果不这样做程序也能执行,只是会隐藏bug) 先进行hashCode值的比较(其中hashcode默认实现是返回一个int数,在object类中是将该对象的内部地址转换为一个整数返回) 然后看是否与集合中的任意一个对象equals相等。 *在hashSet中存同一个元素时,会被舍弃。而在hashMap中放同一个key而value不同时,前面的元素会被覆盖。】 2:若两个对象equals返回true,则hashCode有必要返回相同的值。 3:若两个对象equals返回false,则hashcode不一定返回相同的int数。 4:若两个对象hashCode返回相同的int数,则equals不一定返回true。 5;若两个对象hashCode返回不同的int数,则equals一定返回false。 6:hashCode是为了提高在散列结构存储中查找的效率,在线性表中没有作用。(散列结构存储一般是:hashMap,hashSet,hashTable)。 treeSet:创建对象时进行去重和排序,重写comparaTo方法,返回一个数字。方法重写:int x=this.a-u.a;int y=x==0?This.b-u.b:x; Return y;就是这样一个重写流程。