集合小结

来源:互联网 发布:seo推广学院 编辑:程序博客网 时间:2024/05/20 14:19
package test;

import java.util.HashSet;
import java.util.Set;

/**
*
集合:存储对象数据的集合容器 单例集合: ---------|Collection
*单例集合的根接口
* ------------|List 有序,可重复
* ----------------|ArrayList 底层是利用Object数组实现的,特点:查询数据快,增删慢(原因是内存连续)
* ----------------|LinkedList 底层使用的链表数据实现的,具有查询慢,增删快;
* ----------------|Vactor 底层也是Object数据实现的,类似于ArrayList,但是Vactor是线程安全的,缺点是操作效率低
* ------------|Set 如果是实现了Set接口的集合类,具备的特点是无序,不允许重复
* ----------------|HashSet 底层是使用的是Hash表实现的,特点是存取速度快;
* HashSet存储数据的原理是:往HashSet里面存值得时候会先调用元素的hashCode方法得到元素的哈希码值,通过哈希码值计算出在哈希表中的位置
* 1、如果该位置上没有元素,直接将该元素添加到该位置的哈希表中;
* 2、如果该位置含有其他元素,则调用该元素的equals方法,如果返回值是false,则该元素被添加
* 3、如果该位置含有其他元素,则调用该元素的equals方法,如果返回值是true,则表示元素重复,不允许被添加;
*-----------------TreeSet 底层使用的是红黑树(二叉树),特点是对集合中的元素进行排序存储;
*------------|双列集合 Map(key不可以重复,value可以重复)
*---------------|HashMap:底层是通过哈希表实现的;
*---------------|TreeMap:底层是通过红黑树实现的;
*---------------|HashTable 类似于HashMap,但是是线程安全的;
*
*
*/
class Person{
private String name;
private int age;
public Person(int age,String name){
this.name = name;
this.age = age;
}
@Override
public int hashCode() {//得到hashCode的方法,不再进行计算,直接将固定的值付给Hash即可
return this.age;
}

@Override
public String toString() {
return "姓名:"+name+",年龄:"+age;
}
@Override
public boolean equals(Object obj) {
Person p = (Person) obj;
return this.age ==p.age;
}
}

public class Demo1 {

public static void main(String[] args) {
Set<Person> set = new HashSet();
set.add(new Person(1,"张三"));
set.add(new Person(1,"张三"));
System.out.println(set);

}

}

package test;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;

public class Demo2 {
public static void main(String[] args) {
// 对集合list的操作 使用的是for循环;
List<String> list = new ArrayList();
list.add("张三");
list.add("李四");
list.add("王五");
list.add(1, "赵六");

for (int i = 0; i < list.size(); i++) {
System.out.print(list.get(i));
}

System.out.println("集合长度:" + list.size());
System.out.println("集合的第二个元素:" + list.get(2));
System.out.println("输入全部的集合:" + list);
list.remove(0);
System.out.println("输入删除第一个元素之后的集合:" + list);
list.remove("王五");
System.out.println("输入删除王五之后的集合:" + list);
System.out.println(list.contains("赵六"));
System.out.println(list.indexOf("赵六"));
list.set(0, "李娜娜");
System.out.println(list);
list.clear();
System.out.println(list);
// 使用迭代器
Set<String> set = new HashSet<String>();
set.add("张三");
set.add("李四");
set.add("王五");
Iterator<String> it = set.iterator();
while (it.hasNext()) {
System.out.println(it.next());
}
// 增强for循环,底层就是使用的迭代器实现的
for (String i : set) {
System.out.println(i);
}
// Map
Map<String, String> map = new HashMap();
map.put("张三", "001");
map.put("李四", "002");
map.put("王五", "003");
map.put("赵六", "004");
Set<Entry<String, String>> entrySet = map.entrySet();
for (Entry e : entrySet) {
System.out.println(e.getKey() + " " + e.getValue());
}
}
}

原创粉丝点击