Java基础Day-Fourteen
常见集合与应用
-
Java集合类是一种特别有用的工具类,可用于存储数量不等的对象
-
Java集合包含List、Set、Map以及JDK1.5推出的Queue四种体系
-
Java的集合类主要由两个接口派生而出:Collection和Map
-
四种存储结构
-
List代表有序、可重复集合
-
Queue代表队列特性
-
Set代表无序、不可重复集合
-
Map代表存储映射关系的集合
-
List集合体系及应用
-
List集合代表一个元素有序、可重复的集合,集合中每个元素都有其对应的顺序索引
-
List集合允许使用重复元素,通过索引访问指定位置的元素
-
List集合默认按元素的添加顺序设置元素的索引
ArrayList
-
特点:
-
ArrayList基于数组实现的List类,是Java数组的有效替代品
-
ArrayList会自动对容量进行扩容,多数情况下无须指定最大长度
-
ArrayList的数据在内存中是连续紧密存储的,基于数据访问速度快
-
-
使用方法:
//集合存储在java.util包下 import java.util.ArrayList; ... //实例化ArrayList ArrayList<String> bookList=new ArrayList<String>(); //新增元素,尾部追加 bookList.add("三国演义"); //返回第一个元素,索引从0开始 String bookName1=bookList.get(0);
ArrayList<String> bookList=new ArrayList<String>(); bookList.add("三国演义"); bookList.add("水浒传"); bookList.add("三国演义"); System.out.println(bookList);//[三国演义, 水浒传, 三国演义] String bookName1=bookList.get(1); System.out.println(bookName1);//水浒传 bookList.add(1,"红楼梦"); System.out.println(bookList);//[三国演义, 红楼梦, 水浒传, 三国演义] boolean result1=bookList.add("西游记"); System.out.println("列表是否发生变化:"+result1);//列表是否发生变化:true String before=bookList.set(4,"西游记后传"); System.out.println(before);//西游记 System.out.println(bookList);//[三国演义, 红楼梦, 水浒传, 三国演义, 西游记后传] boolean result2=bookList.remove("西游记后传"); System.out.println(result2);//true System.out.println(bookList);//[三国演义, 红楼梦, 水浒传, 三国演义] String item=bookList.remove(0); System.out.println(item);//三国演义 System.out.println(bookList);//[红楼梦, 水浒传, 三国演义] int count=bookList.size(); System.out.println(count);//3 bookList.set(bookList.size() - 1, "测试数据"); System.out.println(bookList);//[红楼梦, 水浒传, 测试数据] bookList.remove(bookList.size() - 1); System.out.println(bookList);//[红楼梦, 水浒传]
LinkedList特征与方法应用
-
LinkedList同时实现了List与Deque两个接口
-
LinkedList在保障有序、允许重复的前提下,也可以作为队列在队首、队尾快速追加数据
-
LinkedList的数据在内存中是分散存储的,基于链表,拥有良好的数据插入速度,但数据访问速度低于ArrayList
LinkedList<String> boolList = new LinkedList<String>(); boolList.add("三国演义"); boolList.add(0,"水浒传"); boolList.add("西游记"); boolList.add("红楼梦"); System.out.println(boolList);//[水浒传, 三国演义, 西游记, 红楼梦] boolList.addFirst("蒸汽革命"); boolList.addLast("黄金时代"); System.out.println(boolList);//[蒸汽革命, 水浒传, 三国演义, 西游记, 红楼梦, 黄金时代]
ArrayList与LinkedList存储结构
-
ArrayList:访问速度快,操作不便
0 1 2 3 4 A B C D E -
LinkedList:双向指针,增删比较方便
三种集合的遍历方式
-
for循环遍历
-
forEach方法遍历
-
Iteration迭代器遍历
//方法一:for循环遍历 for (String book:booklist){ System.out.println(book); } //方法二:forEach方法遍历 booklist.forEach(book->{ System.out.println(book); }); //方法三:Iteration迭代器遍历 Iterator<String> itr=booklist.iterator(); while(itr.hasNext()){ String book=itr.next();//提取出下一个元素,同时将指针向后移动 System.out.println(book); }