一、List
1. 特点
代码语言:javascript
复制① 有序(存取一致)
② 有索引
③ 可重复
2. 常用方法
代码语言:javascript
复制① add(int index, E element)
将指定的元素,添加到该集合中的指定位置上。
② get(int index)
返回集合中指定位置的元素。
③ remove(int index)
移除列表中指定位置的元素, 返回的是被移除的元素。
④ set(int index, E element)
用指定元素替换集合中指定位置的元素,返回值的更新前的元素。
⑤ 示例
import java.util.ArrayList;
import java.util.List;
public class DemoArrayList {
public static void main(String[] args) {
//多态,创建集合
List<String> list = new ArrayList<>();
//添加数据
list.add("a");
list.add("b");
list.add("c");
list.add("b");
//使用普通for遍历数组
for (int i = 0; i < list.size(); i ) {
System.out.print(list.get(i) 't');
}
}
}
3. ArrayList
代码语言:javascript
复制① java.util.ArrayList集合数据存储的结构是数组结构。
② 元素增删慢,查找快
③ 无特殊功能
4. LinkedList
代码语言:javascript
复制① java.util.LinkedList集合数据存储的结构是链表结构。方便元素添加、删除的集合。
② 常用方法
* addFirst(E e)
将指定元素插入此列表的开头。
* addLast(E e)
将指定元素添加到此列表的结尾。
* getFirst()
返回此列表的第一个元素。
* getLast()
返回此列表的最后一个元素。
* removeFirst()
移除并返回此列表的第一个元素。
* removeLast()
移除并返回此列表的最后一个元素。
* pop()
从此列表所表示的堆栈处弹出一个元素;与removeFist()一样。
* push(E e)
将元素推入此列表所表示的堆栈;与addFist(E e)一样。
* isEmpty()
如果列表不包含元素,则返回true
③ 示例
import java.util.LinkedList;
public class DemoLinkedList {
public static void main(String[] args) {
//创建集合
LinkedList<String> list = new LinkedList<>();
//开头添加数据
list.addFirst("前");
//末尾添加数据
list.addLast("后");
list.addFirst("左");
list.addLast("右");
list.addFirst("上");
list.addLast("下");
list.addFirst("东");
list.addLast("西");
//压栈
list.push("啊哈哈哈哈哈");
System.out.println(list);
//删除开头数据
System.out.println(list.removeFirst());
//删除末尾数据
System.out.println(list.removeLast());
//弹栈
System.out.println(list.pop());
System.out.println(list);
//获取并打印第一个元素
System.out.println(list.getFirst());
//获取并打印最后一个元素
System.out.println(list.getLast());
}
}
二、Set
1. 特点
代码语言:javascript
复制① 无序(存取不一致)
② 不可重复
2. HashSet
代码语言:javascript
复制① java.util.HashSet是Set接口的一个实现类,它所存储的元素是不可重复的,并且元素都是无序的(即存取顺序不一致)
② set1.add(new Student("张三",23));
set1.add(new Student("张三",23));
System.out.println(set1); //[Student{name='张三', age=23},Student{name='张三', age=23}]
set2.add("abc");
set2.add("abc");
System.out.println(set2); //[abc]
* 保证元素唯一性的方式依赖于:hashCode 与 equals方法。
* 判断是否重复的流程
⚪ 使用参数类的 hashCode() 比较两个元素的哈希值,如果哈希值不一样则存入;
⚪ 如果哈希值一样则调用 equals() 比较两个元素的内容是否一样。
* Student 类没有重写 hashCode 与 equals 方法,故使用的是 Object 的。
* 查看重写 hashCode 源码
@Override
public int hashCode() {
return Objects.hash(name, age);
}
//Objects中
public static int hash(Object... values) {
return Arrays.hashCode(values);
}
//Arrays中
public static int hashCode(Object a[]) {
if (a == null)
return 0;
int result = 1;
for (Object element : a)
result = 31 * result (element == null ? 0 : element.hashCode());
return result;
}
* 可变参数
⚪ 参数类型一致而参数个数不确定。
⚪ 格式
修饰符 返回值类型 方法名(参数类型... 形参名){ }
⚪ 底层使用数组实现,可以当作数组使用。
⚪ 示例
public class ChangeArgs {
public static void main(String[] args) {
int[] arr = { 1, 4, 62, 431, 2 };
int sum = getSum(arr);
System.out.println(sum);
}
public static int getSum(int... arr) {
int sum = 0;
for (int a : arr) {
sum = a;
}
return sum;
}
}
⚪ 终极写法
修饰符 返回值类型 方法名(Object... obj){ }
⚪ 注意
一个参数列表只能由一个可变参数
如果由多个参数,可变参数位于最后
3. LinkedHashSet
代码语言:javascript
复制* HsahSet 的子类
* 底层是 哈希表(数组 链表) 链表
* 由哈希表保证唯一性,链表保证存取一致
三、Collections
1. 常用方法
代码语言:javascript
复制① addAll(Collection<T> c, T... elements)
往集合中添加一些元素。
② shuffle(List<?> list)
打乱集合顺序。
③ sort(List<T> list)
将集合中元素按照默认规则排序。
④ sort(List<T> list,Comparator<? super T> )
将集合中元素按照指定规则排序。
2. sort(List<T> list)
代码语言:javascript
复制① 使用该方法的类必须实现 Comparable 并且重写 compareTo()
② 示例
public class Student implements Comparable<Student>{
private String name;
private int age;
public Student() {
}
public Student(String name, int age) {
this.name = name;
this.age = age;
}
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;
}
@Override
public String toString() {
return "Student{"
"name='" name '''
", age=" age
'}';
}
@Override
public int compareTo(Student o) {
if (this.getAge() == o.getAge()) {
return this.getName().compareTo(o.getName());
} else {
return this.getAge() - o.getAge();
}
}
}
public class DemoHashSet {
public static void main(String[] args) {
ArrayList<Student> list = new ArrayList<>();
list.add(new Student("张三",23));
list.add(new Student("里斯",23));
list.add(new Student("王五",13));
Collections.sort(list);
System.out.println(list);
}
}
③ 注意
基本类型 this - obj 升序;obj - this 降序
引用类型 this.compareTo(obj) 升序;obj.compareTo(this) 降序
3. sort(List<T> list,Comparator<? super T> )
代码语言:javascript
复制① 示例
public class CollectionsDemo3 {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<String>();
list.add("cba");
list.add("aba");
list.add("sba");
list.add("nba");
//匿名内部类
Collections.sort(list, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
return o2.charAt(0) - o1.charAt(0);
}
});
System.out.println(list);
}
}