@MRsunhuimin
2019-07-25T11:44:37.000000Z
字数 4142
阅读 210
java基础
Collection接口: List接口 + Set接口
(Collection 接口存储一组不唯一,无序的对象)
List接口:ArrayList集合类 + LinkedList集合类
(List 接口存储一组不唯一,有序(插入顺序)的对象)
Set接口:HashSet集合类 + TreeSet集合类
(Set 接口存储一组唯一,无序的对象)
Map接口:HashMap集合类 + TreeMap集合类
(Map接口存储一组键值对象,提供key到value的映射)
典型用法如下:
Iterator it = collection.iterator(); //获得一个迭代子
while(it.hasNext()) {
Object obj = it.next(); //得到下一个元素
}
1.List的长度可变。
2.List集合像一个数组,是有序的。保持了每个元素的插入顺序,输出的顺序就是插入的顺序。
3.可以插入多个null元素
4.ArrayList实现了长度可变的数组,在内存中分配连续的空间,遍历元素和随机访问元素的效率比较高
5.LinkedList采用链表存储方式,插入、删除元素时效率比较高
6.List可以通过index知道元素的位置,它允许元素的重复。ArrayList, LinkedList, Vector可以实现List接口。
1.无序容器,你无法保证每个元素的存储顺序
2.TreeSet通过 Comparator 或者 Comparable 维护了一个排序顺序。
3.只允许一个 null 元素
4.Set集合是无序的,元素不允许重复。HashSet, LinkedHashSet,TreeSet 可以实现Set接口。
方法1:通过迭代器Iterator实现遍历
获取Iterator :Collection 接口的iterator()方法
Iterator的方法:
boolean hasNext(): 判断是否存在另一个可访问的元素
Object next(): 返回要访问的下一个元素
方法2:增强型for循环
1. Map不是collection的子接口或者实现类。Map是一个接口。
2. Map 里你可以拥有随意个 null 值但最多只能有一个 null 键。
3. Map(interface):使用键值对(key-value),值(value)可以重复,键(key)不可以重复。HashMap, LinkedHashMap, HashTable, TreeMap可以实现Map接口。
4. HashMap对象的key、value值均可为null。
5. (HahTable对象的key、value值均不可为null。且两者的的key值均不能重复,若添加key相同的键值对,后面的value会自动覆盖前面的value,但不会报错。)
6.HashMap和HashTable的区别和联系
6.1 HashMap是非线性安全,HashTable是线性安全的
6.2 HashMap的键和值都允许为null,HashTable则不行
6.3 因为线程安全问题,HashMap的效率较高
6.4 HashMap不是同步的,HashTable是同步的。因此,HashMap更适合于单线程环境,HashTable更适合于多线程环境。
6.5 一般现在不建议用HashTable,一是HashTable是遗留类,内部实现很多没优化和冗余,二是即使在多线程环境下,现在也有ConcurrentHashMap替代。
遍历Map集合方法
方法1:通过迭代器Iterator实现遍历
方法2:增强型for循环
方法3:键值对
如何解决以下强制类型转换时容易出现的异常问题
1.List的get(int index)方法获取元素
2.Map的get(Object key)方法获取元素
3.Iterator的next()方法获取元素
通过泛型
JDK5.0使用泛型改写了集合框架中的所有接口和类
将对象的类型作为参数,指定到其他类或者方法上,从而保证类型转换的安全性和稳定性。
泛型的本质是参数化类型。
泛型集合可以约束集合内的元素类型
典型泛型集合ArrayList<E>、HashMap<K,V> <E>、<K,V>表示该泛型集合中的元素类型
泛型集合中的数据不再转换为Object
除了指定了集合中的元素类型外,泛型集合和之前学习的集合的用法完全一样
Java集合框架将针对不同数据结构算法的实现都保存在工具类中
Collections类定义了一系列用于操作集合的静态方法
Collections类常用方法
Collections和Collection不同,前者是集合的操作类,后者是集合接口
Collections提供的常用静态方法
sort():排序
binarySearch():查找
max()\min():查找最大\最小值
Collections排序
Collections类可以对集合进行排序、查找和替换操作
实现一个类的对象之间比较大小,该类要实现Comparable接口
重写compareTo()方法
1.Collection 、List 、Set 、Map接口的联系和区别
Collection是最基本的集合接口,声明了适用于JAVA集合(只包括Set和List)的通用方法。Map接口并不是Collection接口的子接口,但是它仍然被看作是Collection框架的一部分
list,map,set的区别
list,map,set的区别 (首先假定小猪都是同一个细胞克隆出来的)
List = 排成一长队的小猪
Set = 一群小猪贴上号,然后赶到一个猪圈里
Map = 放在一个个,有房间号的屋子里面的一群小猪
Hashset 它不保证集合的迭代顺序;特别是它不保证该顺序恒久不变。
LinkedHashSet定义了迭代顺序,即按照将元素插入到集合中的顺序(插入顺序)进行迭代。
编写java程序,创建学员studen提那家一些学员对象,对象类,并添加姓名,年龄,性别等字段,创建3个arraylist<T>,指定T为student类,每个arraylist<T>中添加一些学员对象,再创建Hashmap<K,V>对象,以年及名称为键,指定为string类型,指定value类型为arraylist<student>,值为存放学员的arraylist<T>对象,然后从Hashmap<K,V>对象中获取某个班级的学院信息并输出。
package com.java_high.utility_class_test;
/*
* Studentl类,
*/
public class Student {
private String name;
private String sex;
private int age;
public Student(String name,String sex,int age) {
this.name = name;
this.sex = sex;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
package com.java_high.utility_class_test;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Scanner;
/*
* 主程序
* 暂时只给了一个ArrayList赋值
*
*/
public class Demo {
public static void main(String[] args) {
/*
* 创建3个ArrayList集合,指定类型为student类
*/
ArrayList<Student> list1 = new ArrayList<Student>();
ArrayList<Student> list2 = new ArrayList<Student>();
ArrayList<Student> list3 = new ArrayList<Student>();
Student st1 = new Student("张三丰", "男",7);
Student st2 = new Student("杨过","男",9);
Student st3 = new Student("郭靖","女",8);
list1.add(st1);
list1.add(st2);
list1.add(st3);
/*
* HashMap集合
*/
HashMap<String,ArrayList<Student>> map = new HashMap<String,ArrayList<Student>>();
map.put("三年级一班", list1);
map.put("四年级一班", list2);
map.put("五年级一班", list3);
System.out.println("输入班级名称:");
Scanner sc = new Scanner(System.in);
String grade = sc.next();
/*
* 将输入的字符串和HashMap集合的key值进行比较
* 定义一个ArrayList集合来接收key对应的value值
* 使用增强for循环进行输出
*/
if(map.containsKey(grade)) {
System.out.println(grade+"学生列表:");
ArrayList<Student> list = map.get(grade);
for(Student re:list) {
System.out.println(re.getName()+" "+re.getSex()+" "+re.getAge());
}
}
}
}