List集合,数据结构,List子类
List集合特点:
1.有序的;
2.可以存储重复的元素;
3.可以通过索引访问元素
新增的方法:
1.public void add(int index,E elemet) 将指定的元素,添加到该集合中的指定位置上
例如:
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("郭德纲");
list.add("小岳岳");
list.add("于谦");
list.add("郭麒麟");
list.add(1,"柳岩");
System.out.println("索引为一的元素为:"+list);
}
输出的就是把“柳岩”插到了索引为1的位置,其余元素往后移动。
2.public E get(int index) 返回集合中指定位置的元素
例如:
String str=list.get(1);
System.out.println(str);
得到的就是索引为1的元素 柳岩
3.public E remove(int index) 移除列表中指定位置的元素,返回的是被移除的元素
例如:
String st=list.remove(1);
System.out.println(st);
把索引为1的柳岩移除
4.public E set (int index, E element) 用指定元素替换集合中指定位置的元素
例如:
String s=list.set(1,"柳岩");
System.out.println(s);
System.out.println(list);
输出的s为集合中索引为1的元素,list为把小岳岳替换为柳岩后的样子
注意:1.上面的四个方法有个共同的特征,都带索引的参数;
2.上面的四个方法中,在使用索引时,必须保证索引的正确,否则会抛索引越界异常
List<String> list=new ArrayList<>();
System.out.println(list.get(0)); 抛异常java.lang.IndexOutOfBoundsException
System.out.println(list.remove(0)) 抛异常java.lang.IndexOutOfBoundsException
数据结构
1 定义:各种不同的集合,采用了不同的存储数据的方式,这种存储数据的方式就叫数据结构
2 各种不同的数据结构,会影响“增删改查”的性能
3 常用的数据结构:
(1)栈结构 : 后进先出
图片解释:
(2)队列结构 : 先进先出
(3)数组结构: 通过索引查询快,增删慢
(4)链表结构 : 查询慢,增删快(仅指增删的两个动作)
(5)二叉树 :查询快,类似于二分查找
List子类:
ArrayList集合与LinkedList集合(这里主要介绍LinkedList集合)
ArrayList:数组实现
无特有方法
LinkedList:链表实现
(1)public void addFirst(E e) 将指定元素插入此列表的开头
(2)public void addLast(E e) 将指定元素添加到此列表的结尾
(3)public E getFirst() 返回此列表的第一个元素
(4)public E getLast() 返回此列表的最后一个元素
(5)public E removeFirst() 移除并返回此列表的 第一个元素
(6)public E removeLast() 移除并返回此列表的最后一个元素
(7)public E pop() 从此列表所表示的堆栈处弹出一个元素(弹)
(8)public void push(E e) 将元素推入此列表所表示的堆栈
(9)public boolean isEmpty() 如果列表不包含元素,则返回true
Set集合
set集合的特点:
1.无序的;
2.不能存储重复的元素;
3.不能通过索引访问元素
子类HashSet
HashSet底层的实现其实是一个HashMap支持
它存储的元素是不重复的,并且元素都是无序的(存储的顺序不一致)
hashSet是根据对象的哈希值来确定元素在集合中的存储位置,因此具有良好的存取和查找性能。
保证元素唯一性的方式依赖于:hashCode与equals方法
例如:
public class Demo01 {
public static void main(String[] args) {
Set<String> set = new HashSet<>();
set.add("2");
set.add("1");
set.add("3");
set.add("4");
set.add("4");
Iterator<String> it = set.iterator();
while (it.hasNext()) {
System.out.print(it.next()+" ");
}
}
}
结果为1 2 3 4
并不是按照自己输入的顺序来排的
set不存储相同的元素,相同元素比较的是Object中的hashCode()和equals()方法,也就是地址值,相同元素的地址值是一样的,所以只存储一个。
HashSet存储自定义对象:要求自定义对象必须重写hashCode()和equals()方法,如果不重写,就比较Object中的方法,因为它们是不同的对象,所以地址值是不一样的,。所以会把相同的元素存储进去。
HashSet验证元素唯一性的方式:
在add方法中,会将参数对象与已存储的所有对象依次比较:
1.先比较两个对象的hashCode()是否相同
不同:直接存
相同:在调用equals()比较两个对象
不同: 存
相同:不存