集合 Collection 集合的超类 1、add 添加元素 2、clear 清空 3、contains(Object o) 判断集合中是否有指定的元素 4、isEmpty 判断集合是否为空。 其他集合继承Collection集合
集合迭代器 超类调用
public static void f1(Collection<String> c){
Iterator<String> iterator1=c.iterator();
while(iterator1.hasNext()){
System.out.println(iterator1.next());
}
}
List: 它是一个有序的集合(元素存与取的顺序相同) 它可以存储重复的元素 Set: 它是一个无序的集合(元素存与取的顺序可能不同) 它不能存储重复的元素 ? List集合中的特有方法 ? void add(int index, Object element) 将指定的元素,添加到该集合中的指定位置上 ? Object get(int index)返回集合中指定位置的元素。 ? Object remove(int index) 移除列表中指定位置的元素, 返回的是被移除的元素 ? Object set(int index, Object element)用指定元素替换集合中指定位置的元素,返回值的更新前的元素 ? ArrayList: 底层数据结构是数组,查询快,增删慢 ? LinkedList: 底层数据结构是链表,查询慢,增删快 ? HashSet: 元素唯一,不能重复 底层结构是 哈希表结构 元素的存与取的顺序不能保证一致 如何保证元素的唯一的? 重写hashCode() 与 equals()方法 ? LinkedHashSet: 元素唯一不能重复 底层结构是 哈希表结构 + 链表结构 元素的存与取的顺序一致
/* 数据存储的结构: 1、链表数据存储结构 查询速度慢,增加,修改数据快 元素和元素之间通过地址来发生关联 2、堆栈数据存储结构 元素先进后出 3、队列数据存储结构 元素先进先出来 4、数组数据存储结构 根据索引查询快 list接口: 特点: 元素允许重复 有序 带索引的,访问 使用普通for循环 数据结构:数组,查询速度快 应用场景:数据大数据的查询中。 set接口: 特点: 元素不允许重复 无序 无索引 访问迭代器,增强for 数据结构:哈希表的结构( 链表数据存储结构+数组) 应用场景:
LinkedList:常用的方法: 首元素 最后元素
LinkedList<String> list=new LinkedList<>();
list.add("abc");
list.add("def");
list.addFirst("xyz");
list.addLast("mn");
/ 字符串 set应用 / hashSet的存储数据-哈希表 组成:链表和数组 初始化的数组容量最大是16*0.75=12个.保存的数据 hashset集合依赖什么将关联的数据加载一个桶里面。 哈希值和元素是否是相同的类型。 删除重复元素原理: 依赖哈希码值和 equals. */
HashSet<String> hs=new HashSet<String>();
hs.add("a");
hs.add("b");
String str1=new String("abc");
String str2=new String("abc");
hs.add(str1);
hs.add(str2);
hs.add(new String("def"));
System.out.println(str1==str2);
System.out.println(str1.equals(str2));
System.out.println(str1.hashCode());
System.out.println(str2.hashCode());
System.out.println(hs);
类对象 set 集合应用
Set<Student> s1=new HashSet<>();
s1.add(new Student("a",10));
s1.add(new Student("b",11));
s1.add(new Student("a",10));
Student ss1=new Student("a",10);
Student ss2=new Student("a",10);
System.out.println(ss1.equals(ss2));
System.out.println(ss1==ss2);
System.out.println(ss1.hashCode());
public int hashCode(){
return 31*this.name.hashCode()+this.age*55;
}
public boolean equals(Object obj) {
Student s=(Student)obj;
if(this.name==s.name && this.age==s.age){
return true;
}
return false;
}
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
|