JAVASE基础(十五)
来源:互联网 发布:北京网络口碑营销公司 编辑:程序博客网 时间:2024/05/22 00:41
一、List接口
集合的体系:
———| Collection 单列集合的根接口。
————-| List 如果是实现了List接口的集合类,具备的特点: 有序,元素可重复。
————-| Set 如果是实现了Set接口的集合类,具备的特点: 无序,元素不可重复。
有序:在集合中所谓的“有序”不是指自然顺序,而是指添加进去的顺序与存储的顺序一致。
List接口下面特有的方法:
增加 add(int index, E element) 指定索引值添加元素 addAll(int index, Collection c) 指定索引值把一个集合的元素添加到另外一个集合中、删除 remove(int index) 指定索引值删除元素修改 set(int index, E element) 指定索引值修改元素获取 get(int index) 根据索引值获取元素 indexOf(Object o) 查找指定元素第一次出现的索引值, 如果不包含指定的元素则返回-1表示. lastIndexOf(Object o) 查找指定元素最后一次出现的索引值, 如果不包含指定的元素则返回-1表示. subList(int fromIndex, int toIndex) 指定开始于结束的索引值截取集合中的元素,返回 迭代 listIterator() listIterator特有的方法: next() : 先获取当前游标指向的元素,然后游标向下移动一个 单位。 hasPrevious() 问是否有上一个元素 previous() 游标先向上移动一个单位,然后获取当前游标指向的元素。 add(E e) 把元素添加到当前游标指向的位置上。 set(E e) 使用指定的元素替代迭代器最后一次返回的元素。List接口特有的方法都是操作索引值的
public class Demo3 { public static void main(String[] args) { List list = new ArrayList(); list.add("王林"); list.add("马云"); list.add("志军"); /* List list2 = new ArrayList(); list2.add("如花"); list2.add("凤姐"); list2.add("美美"); * 添加 list.add(1,"化腾"); list.addAll(2, list2); * * 删除 System.out.println("返回被删除的元素:"+ list.remove(2)); 修改 list.set(1, "马元坤"); */ System.out.println("集合的元素:"+ list); }}
public class Demo4 { public static void main(String[] args) { List list = new ArrayList(); list.add("王林"); list.add("马云"); list.add("志军"); list.add("马云"); /* System.out.println("元素:"+ list.get(2)); for(int index = 0 ; index< list.size() ; index++){ System.out.print(list.get(index)+","); } System.out.println("索引值:"+ list.indexOf("马云")); System.out.println("最后一次出现 的元素索引值:"+ list.lastIndexOf("马云")); List subList = list.subList(2, 4) ; // 包头不包尾 System.out.println("子集合的元素:"+ subList); */ }}
public class Demo5 { public static void main(String[] args) { List list = new ArrayList(); list.add("王林"); list.add("马云"); list.add("志军"); list.add("表哥"); ListIterator it = list.listIterator(); // 获取到一个迭代器 /* it.next(); it.next(); //System.out.println("有上一个元素吗?"+ it.hasPrevious()); System.out.println("上一个元素:"+ it.previous()); * while(it.hasNext()){ it.next(); } while(it.hasPrevious()){ System.out.print(it.previous()+","); } it.add("宝宝"); */ it.next(); it.next(); it.set("狗娃"); System.out.println("集合的元素:"+ list); }}
需求: 使用四种方式遍历集合的元素
public class Demo6 {
public static void main(String[] args) { List list= new ArrayList(); list.add("王林"); list.add("万林"); list.add("表哥"); list.add("标哥"); // 方式一:toArray(); Object[] arr = list.toArray(); // 把集合的元素添加到一个Object数组中返回。 System.out.println("==========toArray方式遍历========="); for(int i = 0; i < arr.length ; i++){ System.out.print(arr[i]+","); } // 方式二: 使用for循环配合 get的方式。 System.out.println("\r\n=====get方式遍历====="); for(int i = 0 ; i< list.size() ; i++ ){ System.out.print(list.get(i)+","); } //方式三:使用迭代器正序遍历 System.out.println("\r\n======迭代器正序遍历========"); ListIterator it = list.listIterator(); while(it.hasNext()){ System.out.print(it.next()+","); } //方式四:使用迭代器逆序遍历。 System.out.println("\r\n======迭代器逆序遍历========"); while(it.hasPrevious()){ System.out.print(it.previous()+","); }}
}
迭代器在迭代的过程中要注意的事项:
1. 迭代器在迭代的过程中不准使用集合对象改变集合的元素个数。 否则会报出:ConcurrentModificationException 2. 在迭代过程中如果需要改变集合中的元素个数,只能使用迭代器的方法去改变。
public class Demo7 { public static void main(String[] args) { List list= new ArrayList(); list.add("王林"); list.add("万林"); list.add("表哥"); ListIterator it = list.listIterator(); //获取一个迭代器 while(it.hasNext()){ System.out.print(it.next()+","); it.add("狗娃"); //使用的是迭代器的add方法。 迭代器的add方法是把元素添加到当前游标指向的位置。 // list.add("狗娃"); //使用集合对象的add方法,元素每次都是添加到集合对象的最后面。 // list.remove(2); }/* list.add("狗娃"); it.next(); */ }}
二、arrayList接口
集合的体系:
———| Collection 单列集合的根接口
————–| List 如果是实现了List接口的集合类具备的特点: 有序,元素可重复。
——————| ArrayList ArrayList的底层是维护了一个Object数组去实现的, 特点: 查询速度快,增删慢。
ArrayList的应用场景:
如果操作的数据时查询比较多,增删比较少,这时候则应该使用ArrayList. 比如: 图书馆。
笔试题目:使用 ArrayList无参的构造方法是默认的容量是多少? 当容量不够使用时,自动回增长多少?
ArrayList的底层是使用了一个Object数组去实现的,往ArrayList存储数据的时候,数据实际上
是存储到了Object数组中, 使用无参构造函数是,Object数组的初始化容量是10, 当容量不够使用时会自动自增原来的0.5倍。
ArrayList接口实现原理:
三、LinkedList接口
集合的体系:
———| Collection 单列集合的根接口
————–| List 如果是实现了List接口的集合类具备的特点: 有序,元素可重复。
——————| ArrayList ArrayList的底层是维护了一个Object数组去实现的, 特点: 查询速度快,增删慢。
——————| LinkedList 底层是使用了链表数据结构实现的, 特点: 查询速度慢, 增删快。
LinkedList特有的方法:
1:方法介绍 addFirst(E e) 把元素添加到集合的首位置 addLast(E e) 把元素添加到集合的末尾处。 getFirst() 获取集合的首位置元素 getLast() 获取集合的末尾元素 removeFirst() 删除集合的首元素 removeLast() 删除集合的末尾元素2:数据结构 1:栈 (1.6) 先进后出 push() pop() 2:队列(双端队列1.5) 先进先出 offer() poll()3:返回逆序的迭代器对象 descendingIterator() 返回逆序的迭代器对象
LinkedList实现原理:
栈与队列数据结构特点:
public class Demo10 { public static void main(String[] args) { LinkedList list = new LinkedList(); list.add("张三"); list.add("李四"); list.add("王五"); /* list.addFirst("狗娃"); list.addLast("狗剩"); System.out.println("首元素:"+ list.getFirst()); System.out.println("末尾元素:"+ list.getLast()); System.out.println("删除的首元素:"+ list.removeFirst()); System.out.println("删除末尾元素:"+ list.removeLast()); */ list.push("狗娃"); //把元素添加到集合的首位置 System.out.println("出栈(删除并返回集合中首元素):"+ list.pop()); /* list.offer("标哥"); System.out.println("删除并返回集合的首元素:"+ list.poll()); */ Iterator it = list.descendingIterator(); while(it.hasNext()){ System.out.print(it.next()+","); } }}
- JAVASE基础(十五)
- JavaSE基础(一)
- JavaSE基础(二)
- JavaSE基础(三)
- JavaSE基础(四)
- JavaSE基础(五)
- JavaSE基础(六)
- JAVASE基础(一)
- JAVASE基础(二)
- JAVASE基础(三)
- JAVASE基础(四)
- JAVASE基础(七)
- JAVASE基础(八)
- JAVASE基础(九)
- JAVASE基础(十)
- JAVASE基础(十一)
- JAVASE基础(十二)
- javaSE编程基础(函数)
- Web前端分析测试和性能提升
- 第三章 将 selenium集成到scrapy中
- MyBatis 笔记(五)——动态 SQL
- MySQL中InnoDB引擎--特点
- Linux进程入门学习(七)-信号通信
- JAVASE基础(十五)
- 【二叉树,这题太好玩了】226. Invert Binary Tree
- idea rest client 文件上传
- ChatGirl 一个基于 TensorFlow Seq2Seq 模型的聊天机器人[中文文档]
- 牛客网(直通BAT面试算法班) Day1
- SVN常见问题
- Apache Hadoop 2.2.0 HDFS HA + YARN多机部署
- Java多线程调度器(ScheduledThreadPoolExecutor)
- jpa case when otherwise end 的用法