Java--集合--List接口
- List接口和常用方法(底层是一个Object类型的数组)
-
package com.model.list; import java.util.ArrayList; import java.util.List; /** * @Description:测试类 * @Author: 张紫韩 * @Crete 2021/6/11 10:26 */ public class ListDemo01 { public static void main(String[] args) { List<Object> list = new ArrayList<>(); List<Object> list1 = new ArrayList<>(); list.add("zzh"); list.add("zzh1"); list1.add("a"); list1.add("b"); // 1) void add(int index, Object ele):在index位置插入ele元素 list.add(1,"张三丰"); System.out.println("在下标为1的位置插入张三丰:"+list); // 2) boolean addAll(int index, Collection ele):从index位置开始将 ele中的所有元素添加进来 list.addAll(1, list1); System.out.println("从下标为1开始插入list1中的所有元素:"+list); // 3) Object get(int index):获取指定index位置的元素 for (int i=0;i<list.size();i++){ System.out.println("获取到了下表为"+i+"的元素的值为:"+list.get(i)); } // 4) int indexOf(Object obj):返回obj在集合中首次出现的位置 System.out.println("首次出现张三丰的位置:"+list.indexOf("张三丰")); // 5) int lastIndexOf(Object obj):返回obj在当前集合中末次出现的位置 System.out.println("最后一次出现张三丰的位置:"+list.lastIndexOf("张三丰")); // 6) Object remove(int index):移除指定index位置的元素,并返回此元速素 System.out.println("移除了:"+list.remove(0)); // 7) Object set(int index, Object ele):设置指定index位置的元素为ele ,相当于是替换. list.set(1, "B"); System.out.println("下标位1的元素换成B:"+list); // 8) List subList(int fromIndex, int tolndex):返回从fromIndex到tolndex位置的子集合 //注意 自己和返回的是 下表为0 和1 的并不包括2 :即返回 开始下标<=subList<结束下标 之间的元素 System.out.println("返回从 第一个到第三个的子集合"+list.subList(0, 2)); // } }
-
List接口课堂练习
-
-
package com.model.list; import java.util.ArrayList; import java.util.Iterator; import java.util.List; /** * @Description:测试类 * @Author: 张紫韩 * @Crete 2021/6/11 10:53 */ public class ListDemo02 { /* 添加10个以上的元素(比如String "hello" ),在2号位插入-个元素"韩顺平教 育",获得第5个元素,删除第6个元素,修改第7个元素,在使用迭代器遍历集 合,要求:使用List的实现类ArrayList完成。 */ public static void main(String[] args) { List<Object> list = new ArrayList<>(); for (int i = 0; i < 12; i++) { list.add("hello"+i); } list.add(2, "韩顺平教育"); System.out.println("获取到第五个元素:"+list.get(4)); System.out.println("删除了第六个元素:"+list.remove(5)); list.set(6, "zzh"); Iterator<Object> iterator = list.iterator(); while (iterator.hasNext()) { Object next = iterator.next(); System.out.println(next); } } }
-
-
List的三种遍历方式
-
package com.model.list; import javax.swing.plaf.synth.SynthOptionPaneUI; import java.util.*; /** * @Description:测试类 * @Author: 张紫韩 * @Crete 2021/6/11 11:03 */ public class ListDemo03 { //List的三种实现类:ArrayList,LinkedList,Vector public static void main(String[] args) { List<Object> list = new ArrayList<>(); // Vector<Object> list = new Vector<>(); // LinkedList<Object> list = new LinkedList<>(); for (int i = 0; i < 10; i++) { list.add(i); } // 1.迭代器 Iterator<Object> iterator = list.iterator(); while (iterator.hasNext()) { Object next = iterator.next(); System.out.println(next); } System.out.println("***********************"); // 2.增强for循环 for (Object o :list) { System.out.println(o); } System.out.println("***********************"); // 3.for循环方式 for (int i = 0; i < list.size(); i++) { System.out.println(list.get(i)); } } }
-
-
课堂练习
-
package com.model.list; import java.util.ArrayList; import java.util.LinkedList; import java.util.List; import java.util.Vector; /** * @Description:测试类 * @Author: 张紫韩 * @Crete 2021/6/11 11:11 */ public class ListDemo04 { /** 使用List的实现类添加三本图书,并遍历,打印如下效果 名称:XX 价格:XX 作者:XXX 名称:XX 价格:XX 作者:XXX 名称:XX 价格:XX 作者:XXX 1)按价格排序,从低到高(使用冒泡法) 2)要求使用ArrayList、LinkedList 和Vector三种集合实现 */ public static void main(String[] args) { // List<Book> list = new ArrayList<>(); // List<Book> list = new Vector<>(); List<Book> list = new LinkedList<>(); list.add(new Book("三国演义", 18.9d, "罗贯中")); list.add(new Book("水浒传", 18.5d, "施耐庵")); list.add(new Book("西游记", 18.2d, "吴承恩")); list.add(new Book("红楼梦", 18.1d, "曹雪芹")); list.add(new Book("红楼梦", 18.8d, "曹雪芹")); list.add(new Book("红楼梦", 18.4d, "曹雪芹")); list.add(new Book("红楼梦", 18.8d, "曹雪芹")); for (Book book :list) { System.out.println("名称:"+book.getName()+"\t"+"价格:"+book.getPrice()+"\t"+"作者:"+book.getAuthor()); } System.out.println("******排序之后******"); list= (ArrayList<Book>) sort(list); for (Book book :list) { System.out.println("名称:"+book.getName()+"\t"+"价格:"+book.getPrice()+"\t"+"作者:"+book.getAuthor()); } } /* public static List<Book> sort(List<Book> list){ for (int i = 0; i < list.size(); i++) { for (int j=i+1;j<list.size();j++){ if(list.get(i).getPrice()>list.get(j).getPrice()){ Book book =list.get(i); list.set(i, list.get(j)); list.set(j, book); } } } return list; };*/ public static List<Book> sort(List<Book> list){ for (int i = 0; i < list.size()-1; i++) { //第几轮,第一轮结束找到了最大的一个放在最后面,第二轮找到了倒数第二大的,所以内循环中,每次次都要减去 i ,因为后面的后位置已经确定了 // 三个数需要循环两轮,循环次数等于数据的长度-1 // 其中外层循环用于控制排序轮数,一般为要排序的数组长度减1,因为最后一次循环只剩下一个数组元素,不需要对比,同时已经完成排序了。 // 内层循环主要是用于对比数组中每个邻近元素的大小,以确定是否交换位置,对比和交换的次数随排序轮数而减少。 for (int j=0;j+1<list.size()-i;j++){ if (list.get(j).getPrice()>list.get(j+1).getPrice()){ Book book=list.get(j); list.set(j, list.get(j+1)); list.set(j+1, book); } } } return list; } } class Book{ private String name; private double price; private String author; public Book(String name, double price, String author) { this.name = name; this.price = price; this.author = author; } public String getName() { return name; } @Override public String toString() { return "Book{" + "name='" + name + '\'' + ", price=" + price + ", author='" + author + '\'' + '}'; } public void setName(String name) { this.name = name; } public double getPrice() { return price; } public void setPrice(double price) { this.price = price; } public String getAuthor() { return author; } public void setAuthor(String author) { this.author = author; } }
-
-
List接口的实现细节(可以放入null,且可以多个null)
-
package com.model.list; import java.util.ArrayList; import java.util.List; /** * @Description:测试类 * @Author: 张紫韩 * @Crete 2021/6/11 16:39 */ public class ListDemo05 { public static void main(String[] args) { /** * //ArrayList可以放空值且可以放多个空值,有序可重复,有数组实现存储,线程不安全,效率高 * public boolean add(E e) { * ensureCapacityInternal(size + 1); // Increments modCount!! * elementData[size++] = e; * return true; * } * ArrayList线程不安全的,源码中没有synchronized * * */ List<Object> list = new ArrayList<>(); list.add(null); list.add("张紫韩"); list.add(null); for (Object s:list){ System.out.println(s); } } }
-
ArrayList源码分析
- 扩容机制
-
- 扩容机制