一、ArrayList集合的使用

1.1知识点

//创建ArrayList集合对象
ArrayList<String> list = new ArrayList<>();       <>是一种泛型

泛型:是一种数据安全的做法,规定集合应该存储怎样的数据类型

为什么要在集合中添加泛型?
        方便管理

1.2ArrayList集合方法

package com.qf.arraylist_class;import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;public class Test02 {public static void main(String[] args) {//创建ArrayList集合对象ArrayList<String> list = new ArrayList<>();//添加元素list.add("椎名空");list.add("张三");list.add("天使萌");list.add("佐佐木希");list.add("古川伊织");list.add("京香Julia");//在指定下标上插入元素list.add(3, "上原亚衣");//通过下标设置元素list.set(1, "王五");//将newList1中所有的元素添加到list集合的末尾ArrayList<String> newList1 = new ArrayList<>();Collections.addAll(newList1, "aaa","bbb","ccc","ccc");//利用集合工具类对集合进行批量添加list.addAll(newList1);//将newList2中所有的元素添加到list集合指定下标的位置ArrayList<String> newList2 = new ArrayList<>();Collections.addAll(newList2, "xxx","yyy","zzz","zzz");//利用集合工具类对集合进行批量添加list.addAll(3, newList2);//通过下标获取元素String name = list.get(1);System.out.println("通过下标获取元素:" + name);//获取元素个数int size = list.size();System.out.println("获取元素个数:" + size);//清空集合中所有的元素//list.clear();System.out.println("判断集合中是否有指定元素:" + list.contains("天使萌"));//trueSystem.out.println("判断集合中是否有指定集合(判断包含关系):" + list.containsAll(newList1));//trueSystem.out.println("判断集合中是否没有元素:" + list.isEmpty());//false (true-没有元素 false-有元素)System.out.println("获取元素在集合中第一次出现的下标:" + list.indexOf("zzz"));//5System.out.println("获取元素在集合中最后一次出现的下标:" + list.lastIndexOf("zzz"));//6//依据元素删除元素list.remove("上原亚衣");//依据下标删除元素list.remove(1);//去除交集list.removeAll(newList1);//保留交集list.retainAll(newList2);//从开始下标处(包含)截取到结束下标处(不包含),返回新的集合List<String> subList = list.subList(1, 3);//将集合转换为数组Object[] array = subList.toArray();System.out.println(Arrays.toString(array));System.out.println("---------------");//遍历1 - for循环for (int i = 0; i < list.size(); i++) {System.out.println(list.get(i));}System.out.println("---------------");//遍历2 - foreachfor (String element : list) {System.out.println(element);}System.out.println("---------------");//遍历3 - IteratorIterator<String> it = list.iterator();while(it.hasNext()){//判断是否有下一个可迭代的元素String next = it.next();//返回下一个元素System.out.println(next);}System.out.println("---------------");//遍历4 - ListIteratorListIterator<String> listIterator = list.listIterator();while(listIterator.hasNext()) {//判断是否有下一个可迭代的元素String next = listIterator.next();//返回下一个元素System.out.println(next);}}
}

1.3泛型市列

package com.qf.generic01;/*** <> -- 泛型* E - element - 元素* T - type - 类型* K - key - 键* V - value-值*/
public class MyArrayList<E> {public void add(E e){}
}
package com.qf.generic01;import java.util.ArrayList;public class Test01 {public static void main(String[] args) {/*** 需求:模拟ArrayList底层泛型的使用场景* * 泛型的类型必须是引用数据类型*/ArrayList<Integer> list = new ArrayList<>();list.add(100);System.out.println("---------");MyArrayList<Integer> arrayList = new MyArrayList<>();arrayList.add(100);}
}

1.4泛型举例

1.4.1定义泛型方法

package com.qf.generic02;//所有管理系统的标准
public interface ManagerSystem<T> {public int add(T t);public int delete(T t);}

1.4.2实现类重写接口方法

package com.qf.generic02;public class BookManagerSystem implements ManagerSystem<Book>{@Overridepublic int add(Book t) {// TODO Auto-generated method stubreturn 0;}@Overridepublic int delete(Book t) {// TODO Auto-generated method stubreturn 0;}}
package com.qf.generic02;public class StudentManagerSystem implements ManagerSystem<Student>{@Overridepublic int add(Student t) {// TODO Auto-generated method stubreturn 0;}@Overridepublic int delete(Student t) {// TODO Auto-generated method stubreturn 0;}}

1.5泛型限定

package com.qf.generic03;import java.util.ArrayList;public class Test01 {public static void main(String[] args) {}//?表示任何引用类型public static ArrayList<?> method01(){//ArrayList<Object> list = new ArrayList<>();//ArrayList<Integer> list = new ArrayList<>();ArrayList<String> list = new ArrayList<>();return list;}//? extends A (?)表示A类或A的子类public static ArrayList<? extends A> method02(){//ArrayList<A> list = new ArrayList<>();ArrayList<B> list = new ArrayList<>();return list;}//? super A (?)表示A类或A的父类public static ArrayList<? super A> method03(){//ArrayList<A> list = new ArrayList<>();ArrayList<Object> list = new ArrayList<>();return list;}
}

二、迭代

2.1遍历集合

foreach底层由迭代器实现

package com.qf.iterator;import java.util.ArrayList;public class Test01 {public static void main(String[] args) {ArrayList<String> list = new ArrayList<>();list.add("麻生希");list.add("椎名空");list.add("天使萌");list.add("爱田奈奈");for (String element : list) {System.out.println(element);}//foreach底层
//      String element;
//      for(Iterator<String> it = list.iterator();it.hasNext();System.out.println(element)){
//          element = it.next();
//      }}
}

2.2Iterator遍历集合

package com.qf.iterator;import java.util.ArrayList;
import java.util.Iterator;public class Test02 {public static void main(String[] args) {ArrayList<String> list = new ArrayList<>();list.add("麻生希");list.add("椎名空");list.add("天使萌");list.add("爱田奈奈");Iterator<String> it = list.iterator();while (it.hasNext()) {String element = it.next();System.out.println(element);}}
}

2.3Iterator遍历集合到某某值时删除该值

package com.qf.iterator;import java.util.ArrayList;
import java.util.Iterator;public class Test03 {public static void main(String[] args) {/*** 知识点:Iterator* * 需求:使用Iterator遍历集合,在遍历到"椎名空"是删除该元素* * 总结:Iterator可以遍历集合时删除*/ArrayList<String> list = new ArrayList<>();list.add("麻生希");list.add("椎名空");list.add("天使萌");list.add("爱田奈奈");Iterator<String> it = list.iterator();while (it.hasNext()) {String element = it.next();if(element.equals("椎名空")){//ConcurrentModificationException - 当前修改异常//报错原因:ArrayList的操作数 和 Itr的操作数不一致//设计思想:使用迭代器是遍历数据,如果你在遍历时操作数据,会导致遍历数据有误,严谨在遍历时使用集合删除元素,要删除都是使用的迭代器删除元素//list.remove(element);it.remove();}}for (String element : list) {System.out.println(element);}}
}

2.4ListIterator遍历集合

package com.qf.iterator;import java.util.ArrayList;
import java.util.ListIterator;public class Test04 {public static void main(String[] args) {/*** 知识点:ListIterator* * 需求:使用ListIterator遍历集合* * 总结:ListIterator可以像Iterator一样遍历集合*/ArrayList<String> list = new ArrayList<>();list.add("麻生希");list.add("椎名空");list.add("天使萌");list.add("爱田奈奈");ListIterator<String> listIterator = list.listIterator();while(listIterator.hasNext()){String next = listIterator.next();System.out.println(next);}}
}

2.5使用ListIterator遍历集合,遍历到某某元素时删除元素

package com.qf.iterator;import java.util.ArrayList;
import java.util.ListIterator;public class Test05 {public static void main(String[] args) {/*** 知识点:ListIterator* * 需求:使用ListIterator遍历集合,遍历到"椎名空"时删除元素* * 总结:ListIterator可以像Iterator一样遍历集合时删除元素*/ArrayList<String> list = new ArrayList<>();list.add("麻生希");list.add("椎名空");list.add("天使萌");list.add("爱田奈奈");ListIterator<String> listIterator = list.listIterator();while(listIterator.hasNext()){String next = listIterator.next();if(next.equals("椎名空")){listIterator.remove();}}for (String str : list) {System.out.println(str);}}
}

2.6使用ListIterator遍历集合,遍历到某某元素时添加元素

package com.qf.iterator;import java.util.ArrayList;
import java.util.ListIterator;public class Test06 {public static void main(String[] args) {/*** 知识点:ListIterator* * 需求:使用ListIterator遍历集合,遍历到"椎名空"时添加元素* * 总结:ListIterator可以在遍历集合时添加元素*/ArrayList<String> list = new ArrayList<>();list.add("麻生希");list.add("椎名空");list.add("天使萌");list.add("爱田奈奈");ListIterator<String> listIterator = list.listIterator();while(listIterator.hasNext()){String next = listIterator.next();if(next.equals("椎名空")){listIterator.add("罗菌鱼");}}for (String str : list) {System.out.println(str);}}
}

2.7使用ListIterator遍历集合,遍历到某某元素时替换元素

package com.qf.iterator;import java.util.ArrayList;
import java.util.ListIterator;public class Test07 {public static void main(String[] args) {/*** 知识点:ListIterator* * 需求:使用ListIterator遍历集合,遍历到"椎名空"时替换元素* * 总结:ListIterator可以在遍历集合时替换元素*/ArrayList<String> list = new ArrayList<>();list.add("麻生希");list.add("椎名空");list.add("天使萌");list.add("爱田奈奈");ListIterator<String> listIterator = list.listIterator();while(listIterator.hasNext()){String next = listIterator.next();if(next.equals("椎名空")){listIterator.set("罗菌鱼");}}for (String str : list) {System.out.println(str);}}
}

2.8使用ListIterator实现指定下标开始遍历集合

package com.qf.iterator;import java.util.ArrayList;
import java.util.ListIterator;public class Test08 {public static void main(String[] args) {/*** 知识点:ListIterator* * 需求:使用ListIterator实现指定下标开始遍历集合* * 总结:ListIterator可以指定下标开始遍历*/ArrayList<String> list = new ArrayList<>();list.add("麻生希");list.add("椎名空");list.add("天使萌");list.add("爱田奈奈");ListIterator<String> listIterator = list.listIterator(1);while(listIterator.hasNext()){String next = listIterator.next();System.out.println(next);}}
}

2.9使用ListIterator实现倒叙遍历集合

package com.qf.iterator;import java.util.ArrayList;
import java.util.ListIterator;public class Test09 {public static void main(String[] args) {/*** 知识点:ListIterator* * 需求:使用ListIterator实现倒叙遍历集合* * 总结:ListIterator可以实现倒叙遍历集合*/ArrayList<String> list = new ArrayList<>();list.add("麻生希");list.add("椎名空");list.add("天使萌");list.add("爱田奈奈");ListIterator<String> listIterator = list.listIterator(list.size());while(listIterator.hasPrevious()){//判断是否有上一个可迭代的元素String previous = listIterator.previous();//获取上一个元素System.out.println(previous);}/*** Iterator vs ListIterator* * Iterator:正序遍历、删除元素* ListIterator:正序遍历、指定下标开始遍历、倒叙遍历、删除元素、添加元素、替换元素* * 注意:List接口下的实现类才能获取ListIterator*/}
}

3.0 LinkedList之队列模式

package com.qf.linkedlist_class;import java.util.LinkedList;public class Test02 {public static void main(String[] args) {/*** 知识点:LinkedList 之 队列模式* * 队列模式:先进先出*/LinkedList<String> list = new LinkedList<>();list.add("罗非鱼1");list.add("罗非鱼2");list.add("罗非鱼3");list.add("罗非鱼4");list.add("罗非鱼5");while(!list.isEmpty()){//判断集合中是否有元素//删除第一个元素,并返回String element = list.removeFirst();System.out.println(element);}System.out.println("集合中的元素个数:" + list.size());//0}
}

3.1LinkedList 之栈模式

package com.qf.linkedlist_class;import java.util.LinkedList;public class Test03 {public static void main(String[] args) {/*** 知识点:LinkedList 之栈模式* * 栈模式:先进后出/后进先出*/LinkedList<String> list = new LinkedList<>();list.add("罗菌鱼1");list.add("罗菌鱼2");list.add("罗菌鱼3");list.add("罗菌鱼4");list.add("罗菌鱼5");while(!list.isEmpty()){//判断集合中是否有元素//删除最后一个元素,并返回String element = list.removeLast();System.out.println(element);}System.out.println("集合中的元素个数:" + list.size());//0}
}

3.2HashSet

package com.qf.hashset_class;import java.util.HashSet;public class Test02 {public static void main(String[] args) {/*** 知识点:理解HashSet的无序且不可重复* * 存入顺序:*        1.获取对象的hash值 -- hashCode()*         2.通过散列算法计算出在数组中的下标*             2.1 下标上没有元素 --- 直接加入*           2.2 下标上有元素 - 判断两个对象是否相同(hash、==、equals)*                2.2.1 相同对象,不存(达到去重的效果)*                2.2.2 不同对象,就存储* 取出顺序:*        从头到尾遍历数组*/HashSet<String> set = new HashSet<>();set.add("罗志祥");set.add("张柏芝");set.add("阿娇");set.add("陈冠希");set.add("吴亦凡");set.add("吴亦凡");for (String str : set) {System.out.println(str);}}
}

3.3Vector

package com.qf.vector_class;import java.util.Enumeration;
import java.util.Vector;public class Test02 {public static void main(String[] args) {/*** 知识点:Vector的发展史* * Vector是JDK1.0就有的集合类(元老级别的类),但是还没有集合框架的概念* JDK1.2才开始推广集合框架的概念,当时大部分程序员习惯使用Vector,所以Java又给Vector多实现了一个接口(List)* 所以才将其保留下来,所以Vector类中有很多老的方法(这些方法很喜欢使用element来命名)* * Vector是一个线程安全的类*/Vector<String> v = new Vector<>();v.addElement("张三1");v.addElement("张三2");v.addElement("张三3");v.addElement("张三4");v.addElement("张三5");v.addElement("张三6");v.removeElementAt(1);//根据下标删除元素v.removeElement("李林俊6");//根据元素删除元素Enumeration<String> elements = v.elements();while(elements.hasMoreElements()){String nextElement = elements.nextElement();System.out.println(nextElement);}}
}

3.4Stack

package com.qf.stack_class;import java.util.Stack;public class Test01 {public static void main(String[] args) {/*** 知识点:Stack* 特点:栈模式 - 先进后出* * class Stack extends Vector*/Stack<String> stack = new Stack<>();//将元素压入栈顶stack.push("李林俊1");stack.push("李林俊2");stack.push("李林俊3");stack.push("李林俊4");stack.push("李林俊5");//获取栈顶元素String peek = stack.peek();System.out.println(peek);//李林俊5//删除栈顶元素,并返回//String pop = stack.pop();//System.out.println(pop);//李林俊5//查看该元素距离栈顶位置(从1开始)int search = stack.search("李林俊1");System.out.println("查看该元素距离栈顶位置(从1开始):" + search);//遍历while(!stack.empty()){//有元素-false  没有元素-trueString pop = stack.pop();System.out.println(pop);}}
}

Java集合--------16相关推荐

  1. Java 集合系列 16 HashSet

    java 集合系列目录: Java 集合系列 01 总体框架 Java 集合系列 02 Collection架构 Java 集合系列 03 ArrayList详细介绍(源码解析)和使用示例 Java ...

  2. Java 集合深入理解(16):HashMap 主要特点和关键方法源码解读

    >点击查看 Java 集合框架深入理解 系列, - ( ゜- ゜)つロ 乾杯~ 前面我们介绍了 哈希相关概念:哈希 哈希函数 冲突解决 哈希表,这篇文章我们来根据 JDK 1.8 源码,深入了解 ...

  3. 【Java集合框架】16 ——NavigableSet 接口

    一.NavigableSet 接口 是什么 NavigableSet表示Java集合框架中的一个可导航集.NavigableSet接口继承自SortedSet接口.它的行为类似于SortedSet,除 ...

  4. java集合总结_Java中集合总结

    Java数组的长度是固定的,为了使程序能够方便地存储和操作数目不固定的一组数据,JDK类库提供了Java集合,这些集合类都位于java.util包中,但是与数组不同的是,集合中不能存放基本类型数据,而 ...

  5. 考考基础部分,谈谈Java集合中HashSet的原理及常用方法

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 作者:工匠初心 cnblogs.com/LiaHon/p/1125 ...

  6. 【Java集合框架】ArrayList类方法简明解析(举例说明)

    本文目录 1.API与Java集合框架 2.ArrayList类方法解析 2.1 add() 2.2 addAll() 2.3 clear() 2.4 clone() 2.5 contains() 2 ...

  7. Java基础篇:Java集合

    文章目录 1.概述 2.Collection接口 2.1 Collection接口方法 2.2 Iterator迭代器接口 2.3 Collection子接口之:List接口 2.4 Collecti ...

  8. 死磕 java集合之ArrayDeque源码分析

    问题 (1)什么是双端队列? (2)ArrayDeque是怎么实现双端队列的? (3)ArrayDeque是线程安全的吗? (4)ArrayDeque是有界的吗? 简介 双端队列是一种特殊的队列,它的 ...

  9. Java集合框架中Map接口的使用

    在我们常用的Java集合框架接口中,除了前面说过的Collection接口以及他的根接口List接口和Set接口的使用,Map接口也是一个经常使用的接口,和Collection接口不同,Map接口并不 ...

  10. java集合代码_Java-集合(示例代码)

    一.Java集合框架概述 ●一方面,面向对象语言对事物的体现都是以对象的形式,为了方便对多个对象的操作,就要对对象进行存储.另一方面,使用Array存储对象方面具有一些弊端,而Java集合就像一种容器 ...

最新文章

  1. dart参数传方法_为 JavaScript 开发人员准备的 Dart 参考教程
  2. UNICODE编码细节与个人使用总结
  3. 经典网页设计:15个使用网格系统的精美网站作品
  4. Keras(part1)--Keras简介与安装
  5. Android插件化技术调研
  6. Unity 2017 Game Optimization 读书笔记 Dynamic Graphics(2)
  7. BZOJ2658 ZJOI2012 小蓝的好友(treap)
  8. Python_Django_01_day
  9. java参数化查询_【转】参数化查询为什么能够防止SQL注入
  10. SharePoint 2013 图文开发系列之InfoPath入门
  11. visio画图——圆柱
  12. 多传感器融合算法,单目测距、基于双目,长焦短焦,图像拼接,环视等
  13. 乓乓响再度冲刺港股:来自临时及应急服务客户毛利率达70%
  14. Linux笔记 No.17---(磁盘分区fdisk,gdisk,parted、格式化mkfs,mke2fs、挂载mount、卸载umount、df、du、lsof命令)
  15. 电脑睡眠后启动 耳机没有声音 手动启动 -已解决
  16. java count sql_SQL优化之SELECT COUNT(*)
  17. 英语词根记忆法(6)
  18. Linux下文件的读写
  19. 系统架构师论文-论基于构件的软件开发(测井资料处理与解释集成软件)
  20. 技术分享:OpenStack Magnum社区及项目介绍

热门文章

  1. 找回HDFS corrupted文件残留数据
  2. SFP光纤收发器搭配光模块的交换机连接方案解决方案
  3. Android View绘制流程
  4. 用户注册时图片验证码和短信验证码的逻辑
  5. wangeditor富文本编辑器拓展菜单——格式刷
  6. video标签隐藏右下角的三个点
  7. 腾讯乐享社区是什么?如何使用腾讯乐享?如何连接腾讯乐享和企业微信?
  8. 笔记本 无线网联网 win10系统 ,台式机木有无线网卡,通过一根网线连接两台电脑,使台式机联网。...
  9. pytorch accuracy和Loss 的计算
  10. 计算机知识二级竞赛流程,计算机知识竞赛比赛规则及流程