List的特有方法
1.add(int index , object obj)
2.get(int index)
3.set(index obj)
4.remove(int index)
add在列表指定位置插入指定元素:
public class demo{
public static void main(String[] args){
//创建一个list集合
List list = new ArrayList();
list.add("a");
list.add("b");
list.add("c");
list.add("d");
//注意制定索引添加元素不能越界
list.add(5,"w");
//替换指定索引的元素,不能替换超出集合长度的索引
list.set(1,L);
Object object = list.get(3);
Syatem.out.println(object+"----get方法")
System.out.println(list);
//利用list中的get方法遍历集合
for(i = 0; i < list.size();i++){
System.out.println(list.get(i));
}
//被索引删除指定位置的元素
list.remove(1);
}
}
LinkedList
数组实现:
特点: 查询快,增删慢;
查询: 依赖下标查询;
增删: 要把插入元素位置后的所有元素向后移动一位(删除时向前移动一位)
创建数组是默认10个位置,当要保存11个值的时候,系统会创建一个新数组长度为原来的1.5倍.(容易产生内存垃圾)
链表实现:
特点: 查询慢,增删快;
1.链表中的元素保存的是上下元素的地址,通过这个地址可以找到上下元素.
2.在进行查找的时候,先判断被查找的元素距离头近还是尾近.
3.如果头近就从头位置一个一个向下查找(通过保存地址)
4.增删时直接找到元素的位置,并重新保存一下上下元素地址.后面元素的位置都保持不动.
应用: 当查询功能多的时候用ArrayList
当增删元素多的时候用LinkedList
LinkedList的方法
需求:将e.f添加到a.b.c.d的首尾
public class Demo{
public static void main(String[] args){
//创建一个LinkedList
LinkedList linkedlist = new Linledlist();
list.add("a");
list.add("b");
list.add("c");
list.add("d");
//从集合头\尾添加.addFirst\addLast
linkedlist.addFirst("e");
linkedlist.addLast("f");
System.out.println(linkedlist);
//获取头尾元素
System.out.println(linkedlist.getFirst());
System.out.println(linkedlist.getLast());
}
}
需求: 如果数组中有”b”这个元素 就添加”Oh-Yes”这个元素
public class Demo{
public static void fun2() {
List list = new ArrayList();
list.add("a");
list.add("b");
list.add("c");
list.add("d");
//获取集合中的迭代器
//告诉迭代器集合的长度为4 长度就是固定的
/*
Iterator iterator = list.iterator();
//循环遍历
while (iterator.hasNext()) {
if (iterator.next().equals("b")) {
//这里会发生并发修改异常:
//解决方案
list.add("Oh-yes");
iterator.add
}
}
System.out.println(list);
*/
//创建一个获取list中的ListIterator
ListIterator listIterator = list.listIterator();
while (listIterator.hasNext()) {
if (listIterator.next().equals("b")) {
//迭代器迭代时不能直接使用集合去添加新元素,要让迭代器去添加
listIterator.add("Oh-Yes");
}
}
//注意:一般在对集合迭代的时候,不要轻易去改变集合长度
//容易发生修改异常(解决方法 使用迭代器自己的添加方法)
System.out.println(list);
}
}
需求:在集合中储存”a”“a”“a”“b”“b”“b”“c”“c”“c”,要求去除重复元素
public class Demo{
public static void fun3() {
ArrayList list = new ArrayList();
list.add("a");
list.add("a");
list.add("a");
list.add("b");
list.add("b");
list.add("b");
list.add("c");
list.add("c");
list.add("c");
//创建一个新集合
ArrayList newlist = new ArrayList();
//遍历集合
Iterator iterator = list.iterator();
while (iterator.hasNext()) {
//取出每一个元素
Object next = iterator.next();
//判断新集合中包含不包含这个元素
//不包含就添加进去
if (!newlist.contains(next)) {
newlist.add(next);
}
}
//打印新集合查看结果
System.out.println(newlist);
}
}
需求:在集合中存储6个学生:分别有两个涵涵 18岁 两个凉凉 16岁 两个星星 80岁
public class Person {
private String name;
private int age;
public Person() {
// TODO Auto-generated constructor stub
}
public Person(String name, int age) {
super();
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 "Person [name=" + name + ", age=" + age + "]";
}
}
public class Student extends Person {
public Student() {
}
public Student(String name, int age) {
super(name, age);
}
// 重写equals方法(用来判断对象的名字 和 年龄)
// 原来系统equals方法比较的是 地址
// 但是比较地址 对于咱们的需求 无法满足
// 所以要按着咱们的需求 来重写equals方法
@Override // 重写方法名完全一致
public boolean equals(Object obj) {
// student1 和 student2
// this.name 和 obj.name比较
// 传进来的参数 需要向下转型 才能getName
Student student2 = (Student) obj;
// 这里调用是谁的equals 方法
// this.getName()是字符串
// 对象点方法 这个equals 方法是谁的? 那肯定是字符串的
return this.getName().equals(student2.getName()) && this.getAge() == student2.getAge();
}
}
public static void fun4(ArrayList list) {
ArrayList newList = new ArrayList();
Iterator iterator = list.iterator();
while (iterator.hasNext()) {
Object next = iterator.next();
//核心:包含判断
//contains方法底层代码 依赖 equals方法
//equals方法 是基类的 比较是地址是否相同
//字符串比较时用.equals
//contains:是否包含次元素
if (!newList.contains(next)) {
newList.add(next);
}
}
System.out.println(newList);
}
public static void fun5() {
//需求:在集合中存储6个学生:分别有两个涵涵 18岁 两个凉凉 16岁 两个星星 80岁
//去除重复的
//封装去重复值的方法
ArrayList list = new ArrayList();
list.add(new Student("涵涵",18));
list.add(new Student("涵涵",18));
list.add(new Student("凉凉",16));
list.add(new Student("凉凉",16));
list.add(new Student("星星",8));
list.add(new Student("星星",8));
//调用封装好的方法
fun4(list);
//集合中的元素(学生) 地址一样吗?
//如何解决
}