Java基础:List接口中特有方法\LinkedList

来源:互联网 发布:淘宝助理自定义打印 编辑:程序博客网 时间:2024/05/16 05:14

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;}@Overridepublic 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);        //集合中的元素(学生) 地址一样吗?        //如何解决    }
原创粉丝点击