java笔记之集合
Collection集合
定义
Collection是一个接口,是List接口和Set接口的父接口,存储一组不唯一、无序的对象
通用方法
1、clear(); 清空集合
2、isEmpty(); 判断一个集合是否为空
3、toArray(); 将一个集合转换成Array数组
4、add(Object o); 向集合中添加一个元素,返回值是Boolean类型
5、size(); 返回集合中元素个数
6、contains(Object o); 判断集合中是否存在指定元素
7、remove(Object o); 从集合中删除某个元素
8、Iterator(); 迭代器
ArrayList
定义
List的实现类之一,实现了长度可变的数组,在内存中分配连续的空间,遍历元素和访问随机元素的效率较高
创建ArrayList对象
ArrayList list = new ArrayList();
ArrayList的常用方法
1、add(对象名); 向集合中添加元素,返回值是Boolean类型,是在集合的最后一个位置添加
2、add(index,对象名); 向集合中下标为index的位置添加元素,并将index后的元素往后移动一位,返回值为void
3、get(index); 获取下标为index的元素,返回值是object类
4、size(); 返回值是int类型,得到的是集合中元素的个数,与数组中的length属性类似
5、contains(object); 判断列表中,是否含有某个元素,返回值为Boolean类型
6、remove(object); 将列表中指定的元素删除,返回值为Boolean类型
7、remove(index); 将列表中指定位置的元素删除,返回值为object类型
例题:三种遍历方法
//student类
public class Student implements Comparable<Student> {
private String name;
private int age;
private char sex;
public Student(){}
public Student(String name, int age, char sex) {
this.name = name;
this.age = age;
this.sex = sex;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public char getSex() {
return sex;
}
public void setSex(char sex) {
this.sex = sex;
}
@Override
public int compareTo(Student o) {
if(this.age == o.age){
return 0;
}else if(this.age>o.age){
return 1;
}else {
return -1;
}
}
}
//测试类
public class StudentTest {
public static void main(String[] args) {
Student stu1 = new Student("Lisa",18,'女');
Student stu2 = new Student("Andy",19,'女');
Student stu3 = new Student("Tom",18,'男');
Student stu4 = new Student("小明",19,'男');
ArrayList<Student> list = new ArrayList<Student>();
list.add(stu1); //向列表中添加元素
list.add(stu2);
list.add(stu3);
list.add(stu4);
list.remove(2);
list.add(1, stu3);
System.out.println(list.isEmpty());
System.out.println(list.contains(stu1));
//遍历列表
for (int i = 0; i < list.size(); i++) {
Student stu = list.get(i);
System.out.println("名字是:"+stu.getName()+",性别:"+stu.getSex()+",年龄是:"+stu.getAge());
}
System.out.println("************************");
//利用增强for循环遍历数组
for (Student student : list) {
System.out.println("名字是:"+student.getName()+",性别:"+student.getSex()+",年龄是:"+student.getAge());
}
System.out.println("************************");
//使用Iterator迭代器遍历集合
Iterator<Student> l = list.iterator();
while(l.hasNext()){
Student list2 = l.next();
System.out.println("名字是:"+list2.getName()+",性别:"+list2.getSex()+",年龄是:"+list2.getAge());
}
}
}
LinkedList
定义
也是List的实现类,采用链表的存储方式,插入删除元素的效率较高
创建LinkedList对象
LinkedList list = new LinkedList();
LinkedList的独有方法
1、addFirst(Object o); //在列表的首部添加元素,返回值是void
2、addLast(Object o); //在列表的尾部添加元素,返回值是void
3、getFirst(); //返回列表中的第一个元素,返回值是Object
4、getLast(); //返回列表中的最后一个元素,返回值是Object
5、removFirst(); //删除并返回 列表的 第一个元素,返回值是Object
6、removLast( //删除并返回列表中的最后一个元素,返回值是Object
注意:当使用父类引用指向子类对象时,只能使用父子类共有的方法
例题:
Set
Set(HashSet、TreeSet)是 Collection的子接口,存储一组唯一的,无序的对象,Set中存放对象的引用,采用对象的equals()方法比较两个对象是否相等
HashSet
是Set接口的实现类,获取元素只能用增强for循环
使用Iterator迭代器遍历HashSet
获取到迭代器对象
Iterator 对象名 = 集合对象名.Iterator();
Iterator的方法
1、hasNext(); //判断是否有下一个元素,返回值为Boolean类型
2、next(); //放回要访问的下一个元素,返回值为Object类型
例如:
public static void main(String[] args) {
Student stu1 = new Student("Lisa",18,'女');
Student stu2 = new Student("Andy",19,'女');
Student stu3 = new Student("Tom",18,'男');
Student stu4 = new Student("小明",19,'男');
LinkedList< Student> list = new LinkedList<Student>();
list.add(stu1);
list.addLast(stu2);
list.add(stu3);
list.addFirst(stu4);
//遍历列表
for (int i = 0; i < list.size(); i++) {
Student student = list.get(i);
System.out.println(student.toString());
}
System.out.println();
//打印第一个、最后一个元素
System.out.println(list.getFirst());
System.out.println(list.getLast());
//删除第一个元素
list.removeFirst();
//删除最后一个元素
list.removeLast();
System.out.println();
//删除所有
//list.clear();
//使用迭代器遍历
Iterator<Student>iterator = list.iterator();
while(iterator.hasNext()){
System.out.println(iterator.next().toString());
}
//判断集合是否为空
System.out.println(list.isEmpty());
Map
Map接口存一组键值对象,提供key到value的映射,通过key找到value,并且key是唯一的、无序的。
HashMap
创建对象:
Hashmap map = new HashMap();
常用方法:
1、put(key,value); //将key、value存放到HashMap集合中
2、size(); //与之前的用法一样,返回的是键值对数
3、get(Object key); //返回的是一个Object类型,如果找不到,则返回null
4、remove(Object key); //删除指定的键映射的“键值对”
5、keySet(); //返回键的集合,返回值类型是Set
6、value(); //返回值的集合,返回值类型是Collection
7、containsKey(Object key); //如果存在由指定的键映射的“键值对”,返回true,否则false
8、entrySet(); //获取Map中的键值对,返回类型是set类型
遍历HashMap
遍历键值对的集合,把每个键值对(object)--Map.Entry(键值对的类型)拿出来
for(Object obj : set){
Map.Entry me = (Map.Entry)obj;//将object类型强制转换为Map.Entry类型
String key = (String) me.getKey(); //获取出来键值对中的key
String value = (String)me.getValue(); //获取键值对中的value
system.out.prit(key+"--"+value);
}
泛型
定义
将对象的类型作为参数,指定到其他类或方法上,从而保证类型转换的安全性和稳定性
本质
参数化类型
创建集合的时候就对集合进行约束,让其只能够添加某个类型的数据
JDK5.0使用泛型改写了集合框架中的所有接口和类
作用
1、泛型约束了集合框架添加元素的安全性,错误类型的元素添加,在编译的时候就不通过
2、再添加泛型后,返回值不在是object类型而是你在<>中的数据类型
泛型集合
可以约束集合内的元素类型【除了指定了集合中的元素类型外,泛型集合和之前学习的集合用法完全一样】
典型泛型集合
ArrayList<E>、HashMap<K,V>
<E>、<K,V>表示该泛型集合中的元素类型
泛型集合中的数据不再转换为Object
Collections类
是一个工具类
Collections和Collection不同
前者是一个工具类,后者是一个集合接口
Collections提供的常用静态方法
1、sort():排序
2、binarySearch():查找,在查找前需要进行排序
3、max()\min():查找最大值\最小值
4、reverse():翻转元素顺序
使用Collections排序自定义数据类型的集合元素
实现一个类的对象之间比较大小
该类实现Comparable接口
重写compareTo()方法:返回值是int类型,返回结果等于零说明两个值一样大,大于零则当前值大,小于零就是当前值小
例如:
//学生类对象
public class Student implements Comparable<Student> {
private String name;
private int age;
private char sex;
public Student(){}
public Student(String name, int age, char sex) {
this.name = name;
this.age = age;
this.sex = sex;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public char getSex() {
return sex;
}
public void setSex(char sex) {
this.sex = sex;
}
@Override
public int compareTo(Student o) {
if(this.age == o.age){
return 0;
}else if(this.age>o.age){
return 1;
}else {
return -1;
}
}
}
//测试类
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class UseCollections {
public static void main(String[] args) {
Student stu1 = new Student("Lisa",8,'女');
Student stu2 = new Student("Andy",2,'女');
Student stu3 = new Student("Tom",1,'男');
Student stu4 = new Student("小明",4,'男');
List<Student> list = new ArrayList<Student>();//创建ArrayList集合
//添加元素
list.add(stu1);
list.add(stu2);
list.add(stu3);
list.add(stu4);
//对学生对象按年龄进行排序
Collections.sort(list);
for (Student student : list) { System.out.println(student.getName()+":"+student.getSex()+":"+student.getAge());
}
//查找某个人的名字
System.out.println(Collections.max(list).getName());//找出年龄最大的人的名字
System.out.println(Collections.min(list).getName());//找出年龄最小的人的名字
//将拍好序的集合翻转
Collections.reverse(list);
for (Student student : list) { System.out.println(student.getName()+":"+student.getSex()+":"+student.getAge());
}
}
}