初学者的部分理解:有错还望指出QQ:1074953453,需求备注
总结写在前面:
巧记:
1.凡是涉及Set集合均保证了数据的唯一性(不重复)
2.凡是涉及List数据均可重复,线程不安全(Vector除外)
3.凡是涉及到map集合,均有键值对(key-value)模式
巧记:
1.凡是涉及到Linked,底层数据结构均靠链表实现(双向链表)优点是:跟新插入效率高,缺点是:查询效率低
2.凡是涉及到hash,底层数据结构的存储均靠哈希表实现,具体由hashCode()方法和equals()方法,这两个方法一般同时去重写
3.凡是涉及到Tree,底层数据结构均靠红黑树实现(平衡二叉树,且数据存储时按照自然排序或者实现Comparable排序)
补充:底层维护数组的数据结构,查询效率高
ArrayList集合
底层实现 | 由数组实现 |
具有List的特点: | 1.不保证数据的唯一性 2.线程不安全 3.效率高 |
重写equlas方法保证唯一性(每个实体都要具体对待)
Person类中的方法重写
// An highlighted block
@Override
public boolean equals(Object obj) {
if (obj == this) {
return true;
}
if (! (obj instanceof Person)) {
try {
throw new Exception("输入类型错误");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
Person p = (Person)obj;
return this.name.equals(p.name)&&this.age==p.age;
}
Test类中测试完整过程
// An highlighted block
package TestHashSet;
import java.util.ArrayList;
import java.util.Iterator;
public class ArrayListTest {
public static void main(String[] args) {
ArrayList<Person> al = new ArrayList<>();
al.add(new Person("小一",10));
al.add(new Person("小二",15));
al.add(new Person("小三",13));
al.add(new Person("小四",20));
al.add(new Person("小一",10));//与第一个输入低数据相同
for(Person person : al) {
System.out.println(person);
}
System.out.println("====================");
ArrayList as = singleArrayList(al);
for (Object object : as) {
System.out.println(object);
}
}
public static ArrayList singleArrayList(ArrayList<Person> al){
ArrayList<Person> tmp = new ArrayList<>();
Iterator<Person> it = al.iterator();
while (it.hasNext()) {
Person p = it.next();
if (!tmp.contains(p)) {
tmp.add(p);
}
}
return tmp;
}
}
运行结果如下:
LinkedhashSet
后者在前者上又实现了hash表的存储结构
底层实现 | 由链表实现(双向链表)和哈希表确定存储顺序 |
具有set的特点: | 1.保证数据的唯一性 2.线程不安全 3.效率高 |
排序 : |
// An highlighted block
package TestHashSet;
import java.util.ArrayList;
import java.util.LinkedHashSet;
public class LinkedHashSetTest {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList();
list.add("a");
list.add("b");
list.add("a");
list.add("c");
list.add("a");
System.out.println(list);
System.out.println("---------");
System.out.println("去除重复后:");
LinkedHashSet<String> s = new LinkedHashSet<>();
s .addAll(list);//可以使用此方式实现集合类型转换
System.out.println(s);
}
}
运行结果:
TreeSet集合
底层实现 | 有平衡二叉树数据结构组成 |
具有Set的特点: | 1.保证数据的唯一性 2.线程不安全 3.效率高 |
排序 : | 可自动排序或者使用实现了Comparator的重写方法ComparaTo,进行排序 |
// An highlighted block
package TestHashSet;
import java.util.TreeSet;
public class TreeSetTest {
public static void main(String[] args) {
TreeSet<Integer> ts = new TreeSet<>();
ts.add(10);
ts.add(5);
ts.add(1);
ts.add(18);
for (Integer integer : ts) {
System.out.println(integer);
}
}
}
TreeSet实现重写ComparaTof方法自动排序
Person类中的代码
// An highlighted block
public class Person implements Comparable<Person>{
@Override
public int compareTo(Person p) {
//根据原方法的判断条件,只修改要判断的内容
//比较此对象与指定对象的顺序。如果该对象小于、等于或大于指定对象,则分别返回负整数、零或正整数。
if (this.age>p.age) {
return 1;
}else if(this.age<p.age){
return -1;
}
return 0;
}
}
// An highlighted block
package TestHashSet;
import java.util.TreeSet;
public class TreeSetTest {
public static void main(String[] args) {
TreeSet<Person> ts = new TreeSet<>();
//
// ts.add(10);
// ts.add(5);
// ts.add(1);
// ts.add(18);
//
// for (Integer integer : ts) {
// System.out.println(integer);
// }
ts.add(new Person("小一",10));
ts.add(new Person("小二",15));
ts.add(new Person("小三",13));
ts.add(new Person("小四",20));
for (Person p : ts) {
System.out.println(p);
}
}
}
Map: key - value collection单列集合
1.Map的设计为一个接口
2.Map针对的是键和值由一定的映射关系
3.键应该是唯一的,无序的,由keySet()方法返回所有的Key,获得一个Set集合
4.值是可以重复的,由get方法调用返回所有的值,获得一个Collection
5.存储顺序取决于Key的数据结构
HashMap
底层原理数据结构仅对键有效,数据结构是哈希表
依赖于哈希算法
Map最大的区别是:key不可以重复,value可以重复
缺点!!!!!
会产生数值覆盖,类似于Set
// An highlighted block
package TestHashSet;
import java.util.LinkedHashMap;
import java.util.Set;
public class LinkedHashMapTest {
//练习
public static void main(String[] args) {
LinkedHashMap<String, Person> name = new LinkedHashMap<>();
name.put("小刘",new Person("小刘",15));
name.put("小刘",new Person("XX",15));
Set set = name.entrySet();
for (Object object : set) {
System.out.println(object);
}
}
}
运行结果:
TreeMap
基于红黑树的NavigableMap实现。
该映射根据其键的自然顺序来排序,或者根据创建映射时提供的Comparator来进行排序
具体取决于使用的构造方法
特点:
键可排序,唯一
值可重复
底层数据结构是平衡的二叉树可排序,排序方式取决于自然排序和比较器排序