java基础学习——集合

时间:2021-05-18 09:13:32

-------|List: 有存储顺序, 可重复
-----------|ArrayList: 数组实现, 查找快, 增删慢,由于是数组实现, 在增和删的时候会牵扯到数组增容, 以及拷贝元素. 所以慢。数组是可以直接按索引查找, 所以查找时较快
-----------|LinkedList: 链表实现, 增删快, 查找慢由于链表实现, 增加时只要让前一个元素记住自己就可以, 删除时让前一个元素记住后一个元素, 后一个元素记住前一个元素. 这样的增删   效率较高但查询时需要一个一个的遍历, 所以效率较低
-----------|Vector: 和ArrayList原理相同, 但线程安全, 效率略低和ArrayList实现方式相同, 但考虑了线程安全问题, 所以效率略低
-------|Set: 无存储顺序, 不可重复
-----------|HashSet 线程不安全,存取速度快。底层是以哈希表实现的。
-----------|TreeSet 红-黑树的数据结构,默认对元素进行自然排序(String)。如果在比较的时候两个对象返回值为0,那么元素重复。
-------| Map: 键值对 键不可重复,键可以重复
-----------|HashMap 线程不安全,存取速度快。底层是以哈希表实现的.
-----------|TreeMap 红-黑树的数据结构,默认对元素进行自然排 序(String)。如果在比较的时候两个对象返回值为0,那么元素重复
-----------|HashTable 底层也是使用了哈希表 维护的,存取的读取快,存储元素是 无序的。

一、HashSet集合:无序存储,不可重复

当我们想创建一个hashset集合,往HashSet内添加元素的时候,会首先调用HashCode方法得到哈希值,然后把哈希值经过运算 算出来该元素在哈希表中位置,如果该位置不存在别的元素则直接加进去,如果存在别的元素则调用equals()方法与该位置上的方法比较一次。

1.元素为string类型,可以直接用HashSet<string>集合来创建,string集合重写了hashcode()和equals()方法

2.元素为自定义对象,需要重写重写了hashcode()和equals()方法。

 class Person {
int id;
String name; public Person (int id, String name ){
super();
this.id= id;
this.name= name;
}
@Override
public int hashCode() {
// TODO Auto-generated method stub
return this.id;
}
@Override
public boolean equals(Object obj) {
Person person = new Person(id, name);
return this.id==person.id;
}
@Override
public String toString() {
return "编号:"+this.id+" 姓名:"+this.name +" hashcode:"+this.hashCode();
}
}
public class demo1 {
public static void main(String[] args) {
HashSet<Person> set = new HashSet<Person>();
set.add(new Person(001,"jjj"));
set.add(new Person(001,"jjj"));
System.out.println("集合的元素:"+set);
}
}

运行结果:

集合的元素:[编号:1 姓名:jjj hashcode:1]

二、集合的遍历

     public static void main(String[] args) {
ArrayList<String > list = new ArrayList<>();
list.add("张三");
list.add("李四");
list.add("王五");
System.out.println("----------get方式遍历----------");
for (int i = 0; i < list.size(); i++) {
System.out.println(i+":"+list.get(i));
} //迭代器遍历 HashSet<String > hashSet = new HashSet<>();
hashSet.add("老大");
hashSet.add("老二");
hashSet.add("老三");
System.out.println("---------迭代器遍历----------");
Iterator<String> iterator = hashSet.iterator();
while (iterator.hasNext()) {
System.out.println(iterator.next());
} for(String item:hashSet){
System.out.println(item+",");
} Map<String , String > map = new HashMap<String , String >();
map.put("001","z001");
map.put("002","z002");
map.put("003","z003");
Set<Entry<String, String>> entrySet = map.entrySet();
for (Entry<String, String> entry : entrySet) {
System.out.println("key:"+entry.getKey()+" value:"+entry.getValue());
}
}