Java学习day03--Collection的子类之List和Set
Collection的子类之List和Set
该模块涉及抽象类List、Set。也涉及List的子类ArrayList和LinkedList,Set的子类HashSet、LinkedHashSet。最后还讲解了可变参数、Collections工具类的简单用法。内容不多,但较为抽象,需要自己多练多理解。
List抽象类
List(接口)特点:1.有序的;2.可以存储重复元素;3.可以通过索引访问元素。
昨天讲了Collection类的一些方法:
增: 1个
add(E e) // 返回值为布尔类型,对于Set添加重复值时返回fasle,其余返回true
删: 2个
remove(E e) // 返回值为布尔类型,删除不存在的元素返回false
clear() // 将元素删完
查: 5个
isEmpty()
size()
toArray()
contains(E e) // 是否包含e
iterator() // 迭代器
-
List类新增方法
(1).增:public void add(int index,E e)
:将e添加到当前集合的index位置。
(2).删:public E remove(int index)
:删除index位置上的元素,并将删除的元素返回。
(3).改:public E set(int index,E element)
:将element替换index位置上的元素,并将原index位置上的元素返回。
(4).查:public E get(int index)
:获取index位置上的元素。 -
`ArrayList类
ArrayList类是List类的子类,无新增方法。 -
LinkedList类
新增了模栈结构的方法
(1)public void push(E e)
相当于addFirst()方法
(2)public E pop()
弹栈
(3)public E poll()
弹栈,与pop()不同的是当栈内元素为空时不会报错,且弹出null
Set抽象类
Set(接口)特点:1.无序的;2.不能存储重复元素;3.不能通过索引访问元素;
Set无新增方法,但要注意:
用该数据结构添加对象去重时,需要在类中定义去重的方法:equals和hashCode方法。可以在方法里自定义根据对象的什么属性去重。
-
`HashSet类
无新增方法 -
`LinkedHashSet类
该类是有序的,它是Set的一个特例。
可变参数
如果不知道传入函数的参数有多少个时,可以利用可变参数。如:
public class Test05 {
public static void main(String[] args) {
System.out.println(func('f',2,3,4,5,6,7,8,9,0));
}
public static int func(char ch, int... arr){ // 此处的int..arr用于接收可变参数,arr在函数内部是一个数组
int sum = ch;
for (int i = 0; i < arr.length; i++) {
sum += arr[i];
}
return sum;
}
}
用T… arr的形式来接收可变参数,且可变参数必须位于函数参数的最后。
Collections类
Collections.shuffle(List<T> list)
// 洗牌Collections.sort(List<? extends Comparable> list)
// 比较
在对象类中需要实现比较器,如:
class Student implements Comparable{
String name;
int age;
@Override
public int compareTo(Object o) {
Student s = (Student)o;
return this.age - s.age; // 升序
}}
Collections.sort(List<?> list, Comparator cp)
//自己传递一个比较器
方式一:写一个比较器类
class Mycp implements Comparator<Student>{
@Override
public int compare(Student o1, Student o2) {
return o2.age - o1.age;
}
}
之后再Collections.sort(list2, new Mycp())
。
方式二:直接写一个匿名对象
Collections.sort(list2, new Comparator<Student>(){ // 匿名对象
@Override
public int compare(Student o1, Student o2) {
return o2.age - o1.age;
}
}); // 第二种写法