今日学习内容总结
- List集合
- LinkedList集合
- Set接口
- HashSet接口
- 哈希表
- 可变参数
- Collections
List集合
List接口特点:
- 它是一个元素存取有序的集合。例如,存元素的顺序是11、22、33。那么集合中,元素的存储就是按照11、22、33的顺序完成的)。
- 它是一个带有索引的集合,通过索引就可以精确的操作集合中的元素(与数组的索引是一个道理)。
- 集合中可以有重复的元素,通过元素的equals方法,来比较是否为重复的元素。
List接口中常用方法:
-
public void add(int index, E element)
: 将指定的元素,添加到该集合中的指定位置上。 -
public E get(int index)
:返回集合中指定位置的元素。 -
public E remove(int index)
: 移除列表中指定位置的元素, 返回的是被移除的元素。 -
public E set(int index, E element)
:用指定元素替换集合中指定位置的元素,返回值的更新前的元素。
LinkedList集合
LinkedList不能使用多态
特点:
- 1、查询慢,增删快
- 2、包含了大操作首尾元素的方法
常用方法:
-
public void addFirst(E e)
:将指定元素插入此列表的开头。 -
public void addLast(E e)
:将指定元素添加到此列表的结尾。 -
public E getFirst()
:返回此列表的第一个元素。 -
public E getLast()
:返回此列表的最后一个元素。 -
public E removeFirst()
:移除并返回此列表的第一个元素。 -
public E removeLast()
:移除并返回此列表的最后一个元素。 -
public E pop()
:从此列表所表示的堆栈处弹出一个元素。 -
public void push(E e)
:将元素推入此列表所表示的堆栈。 -
public boolean isEmpty()
:如果列表不包含元素,则返回true。
Set接口
使用Set需要在自定义的类中添加equals和hashCode方法
特点:
- 1、不允许存储重复的元素
- 2、没有索引,没有带索引的方法,也不能使用普通的for循环遍历
HashSet集合
特点:
- 1、不允许存储重复的元素
- 2、没有索引,没有带索引的方法,也不能使用普通的for循环遍历
- 3、是一个无序的集合,存取元素的顺序有可能不一致
- 4、底层是一个哈希表结构(查询的速度非常快)
哈希表
特点:哈希表存储采用数组+链表+红黑树实现,查询速度快
-
哈希值:是一个十进制的证书,由系统随机给出(对象的逻辑地址值)
使用Object中的hashCode方法可以得到哈希值 -
创建:
HashSet<String> hashSet=new HashSet<>();
-
HashSet存储自定义类型元素必须重写hashCode和equals方法
-
结构:
哈希表
LinkedHashSet集合
特点:底层是一个哈希表,多了一个链表(记录元素的存储顺序),保证元素有序,不允许重复
可变参数
- 可变参数的原理:
可变参数底层就是一个数组,根据传递参数个数不同,会创建不同长度的数组,来存储这些参数(传递的参数可以是0个或者多个) - 使用前提:当方法的参数列表数据类型已经确定,但是参数的个数不确定,就可以用可变参数
- 使用格式:
修饰符 返回值类型 方法名(参数类型... 形参名){ }
等价于:修饰符 返回值类型 方法名(参数类型[] 形参名){ }
例子:
public static void main(String[] args) {
System.out.println(add(3,5,8));
}
public static int add(int...a){
int sum=0;
for (int i : a) {
sum+=i;
}
return sum;
}
- 注意事项:
1、一个方法的参数列表,只能有一个可变参数
2、如果方法的参数有多个,那么可变参数必须写在参数列表的末尾
可变参数的终极写法:修饰符 返回值类型 方法名(Object...obj){ }
Collections
常用方法:
-
public static <T> boolean addAll(Collection<T> c, T... elements)
:往集合中添加一些元素。
ArrayList<String> arrayList=new ArrayList<>();
Collections.addAll(arrayList,"d","y","z");
-
public static void shuffle(List<?> list) 打乱顺序
:打乱集合顺序。
Collections.shuffle(arrayList);
-
public static <T> void sort(List<T> list)
:将集合中元素按照默认规则排序。
Collections.sort(arrayList);
注意:如果要排序自定义类元素,被排序的集合里存储的元素,必须实现Comparable,重写接口中的compareTo方法的排序规则(this - 参数为升序排序)
-
public static <T> void sort(List<T> list,Comparator<? super T> )
:将集合中元素按照指定规则排序。
Collections.sort(people, new Comparator<Person>() {
@Override
public int compare(Person o1, Person o2) {
return o1.getAge()-o2.getAge();
}
});
Comparator和Comparable的区别:
1、Comparable:this和参数比较,自己需要实现Comparable接口,重写compareTo方法
2、Comparator:相当于找一个第三方的裁判进行比较
网友评论