ArrayList类

import java.util.Objects;
/*ArrayList类概述底层数据结构是数组,查询快,增删慢线程不安全,效率高
*/
public class Student {private String name;private int age;public Student() {}public Student(String name, int age) {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 "Student{" +"name='" + name + '\'' +", age=" + age +'}'+"\n";}@Overridepublic boolean equals(Object o) {if (this == o) return true;if (o == null || getClass() != o.getClass()) return false;Student student = (Student) o;return age == student.age &&Objects.equals(name, student.name);}
}/*使用ArrayList存储自定义对象并遍历
*/import java.util.ArrayList;
import java.util.Iterator;public class ArrayListDemo1 {public static void main(String[] args) {//创建ArrayList集合对象ArrayList arrayList = new ArrayList();//创建5个学生对象Student s1 = new Student("范闲", 23);Student s2 = new Student("范思辙", 22);Student s3 = new Student("鸡腿菇凉", 20);Student s4 = new Student("范若若", 21);Student s5 = new Student("庆帝", 50);//将学生对象添加到集合中arrayList.add(s1);arrayList.add(s2);arrayList.add(s3);arrayList.add(s4);arrayList.add(s5);//遍历的第一种方式1:迭代器遍历//获取迭代器对象Iterator iterator = arrayList.iterator();while (iterator.hasNext()) {Student s = (Student) iterator.next();System.out.println(s.getName() + "---" + s.getAge());}System.out.println("============================================");//遍历的第一种方式2:get()和size()方法结合for (int i = 0; i < arrayList.size(); i++) {Student student = (Student) arrayList.get(i);System.out.println(student.getName() + "---" + student.getAge());}}
}

Vector类

import java.util.Enumeration;
import java.util.Vector;/*Vector:底层数据结构是数组,查询快,增删慢线程安全的(被同步关键字synchronized修饰),效率低(虽然是线程安全的,以后我们也不使用它,后面会说一个线程安全的类替代它)Vector特有的方法:public void addElement(Object obj)将元素添加到集合的末尾---效果和add()一样public Object elementAt(int index)返回指定索引处的组件-----效果和get(int index)public Enumeration elements()返回此向量的组件的枚举--效果与迭代器一样
*/
public class VectorDemo1 {public static void main(String[] args) {//创建Vector集合对象Vector vector = new Vector();//向集合中添加元素vector.addElement("hello");//效果和add()一样vector.add("world");vector.addElement("java");//public Object elementAt(int index)Object o = vector.elementAt(0);System.out.println(o);System.out.println(vector.elementAt(1));System.out.println(vector.elementAt(2));//报错:下标越界异常3(下标索引)>=3(元素个数)//System.out.println(vector.elementAt(3));//效果和get(int index)//System.out.println(vector.get(0));//public Enumeration elements()Enumeration elements = vector.elements();while (elements.hasMoreElements()){Object o1 = elements.nextElement();System.out.println(o1);}System.out.println("=====================================");System.out.println(vector);}
}

LinkedList类

import java.util.LinkedList;/*LinkedList:底层数据结构为双链表,查询慢,增删快线程不安全的,效率高LinkedList特有的功能:1、添加功能:void addFirst(Object obj) 在该列表开头插入指定的元素。void addLast(Object obj) 将指定的元素追加到此列表的末尾。等同于add()方法2、获取功能:Object getFirst() 返回此列表中的第一个元素。Object getLast() 返回此列表中的最后一个元素。3、删除功能:Object removeFirst() 从此列表中删除并返回第一个元素。Object removeLast() 从此列表中删除并返回最后一个元素。
*/public class LinkedListDemo1 {public static void main(String[] args) {//创建LinkedList集合对象LinkedList linkedList = new LinkedList();//添加元素到集合中linkedList.add("hello");linkedList.add("world");linkedList.add("java");linkedList.add("hadoop");linkedList.add("hive");linkedList.add("spark");System.out.println(linkedList);System.out.println("=======================================");//void addFirst(Object obj) 在该列表开头插入指定的元素。linkedList.addFirst("flink");System.out.println(linkedList);//void addLast(Object obj) 将指定的元素追加到此列表的末尾。linkedList.addLast("Hbase");System.out.println(linkedList);//Object getFirst() 返回此列表中的第一个元素。Object first = linkedList.getFirst();System.out.println(first);System.out.println(linkedList);//Object getLast() 返回此列表中的最后一个元素。Object last = linkedList.getLast();System.out.println(last);System.out.println(linkedList);//Object removeFirst() 从此列表中删除并返回第一个元素。Object o = linkedList.removeFirst();System.out.println(o);System.out.println(linkedList);//Object removeLast() 从此列表中删除并返回最后一个元素。Object o1 = linkedList.removeLast();System.out.println(o1);System.out.println(linkedList);}
}

List集合练习

import java.util.ArrayList;
import java.util.Iterator;/*去除集合中字符串的重复值(字符串的内容相同)方式:创建一个新的集合
*/
public class ArrayListTest1 {public static void main(String[] args) {//创建旧集合对象ArrayList list = new ArrayList();//向集合中添加字符串元素list.add("hello");list.add("world");list.add("java");list.add("hadoop");list.add("hive");list.add("hello");list.add("spark");list.add("java");System.out.println("去重之前的集合为:"+list);//创建一个新的集合保存去重后的元素ArrayList list2 = new ArrayList();//遍历旧的集合Iterator iterator = list.iterator();while (iterator.hasNext()){String s = (String) iterator.next();//获取到元素后,拿着这个元素去新的集合里面去找,如果找到说明重复//如果没有找到,就添加到新集合中if(!list2.contains(s)){//这里不会有并发修改异常//因为这里是新创建的集合list2.add(s);}}System.out.println("去重后的集合为:"+list2);}
}
import java.util.AbstractCollection;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.Objects;public class Student {private String name;private int age;public Student() {}public Student(String name, int age) {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 "Student{" +"name='" + name + '\'' +", age=" + age +'}'+"\n";}//之后加的@Overridepublic boolean equals(Object o) {if (this == o) return true;if (o == null || getClass() != o.getClass()) return false;Student student = (Student) o;return age == student.age &&Objects.equals(name, student.name);}
}/*去除集合中自定义对象的重复值(对象的成员变量值都相同,姓名和年龄相同)我们按照处理字符串的形式处理重复的自定义对象,发现结果并没有去重为什么呢?要想知道为什么,就得知道问题处在了哪一行代码经过简单的分析后,我们发现问题出现了在判断的时候出现了。因为只有当if里面是true的时候,才添加到新集合中,说明我们的代码一直都是true,换句话说,contains()方法并没有生效怎么改呢?要想知道怎么改,看一看contains内部是怎么实现的。底层调用的是元素的equals方法,又因为我们Student类没有重写equals方法调用的是父类Object类中的equals方法,比较的是地址值,所以contains()方法结果永远是false,就相当于if(!false){.....}--if语句永远是true。所以产生了没有去重的效果。解决办法:元素类重写equals()方法
*/public class ArrayListTest2 {public static void main(String[] args) {ArrayList list = new ArrayList();Student s1 = new Student("朱佳乐", 18);Student s2 = new Student("吕常福", 19);Student s3 = new Student("陶华根", 20);Student s4 = new Student("朱佳乐", 18);Student s5 = new Student("朱佳乐", 19);list.add(s1);list.add(s2);list.add(s3);list.add(s4);list.add(s5);System.out.println(list);System.out.println("================================");ArrayList list2 = new ArrayList();Iterator iterator = list.iterator();while (iterator.hasNext()){Student s = (Student) iterator.next();//if()方法判断:如果新集合中不包含旧集合中的元素就进入循环         if(!list2.contains(s)){//观察源码发现contains()方法底层调用的==和equals()方法//由于原先我们并没有在Student类中重写equals()方法,所以比较的是地址值//观察源码后,我们发现contains()方法返回结果是一直是false,所以加上一个 !就变成true。//所以进入if()语句体list2.add(s);}}System.out.println(list2);}
}//-----------contains()方法源码-------------------public boolean contains(Object o) {return indexOf(o) >= 0;//-1不大于0,所以contains()方法结果永远是false。
}//The size of the ArrayList (the number of elements it contains).
private int size;/*** The array buffer into which the elements of the ArrayList are stored.* The capacity of the ArrayList is the length of this array buffer. Any* empty ArrayList with elementData == DEFAULTCAPACITY_EMPTY_ELEMENTDATA* will be expanded to DEFAULT_CAPACITY when the first element is added.*/
transient Object[] elementData;public int indexOf(Object o) {if (o == null) {//--o的地址值肯定不是nullfor (int i = 0; i < size; i++)if (elementData[i]==null)return i;} else {for (int i = 0; i < size; i++)//o为旧集合中的元素(Student),而调用方法的是新集合if (o.equals(elementData[i]))return i;}return -1;//--返回的是-1
}
import java.util.Iterator;
import java.util.LinkedList;/*请用LinkedList模拟栈数据结构的集合,并测试栈的特点:先进后出题目的真正意思是,自己写一个类,底层是LinkedList,调用自己写的方法实现栈数据结构
*/
public class LinkedListTest1 {public static void main(String[] args) {//创建集合LinkedList linkedList = new LinkedList();
//        linkedList.add("hello");
//        linkedList.add("world");
//        linkedList.add("java");linkedList.addFirst("hello");linkedList.addFirst("world");linkedList.addFirst("java");linkedList.addFirst("hadoop");System.out.println(linkedList);//遍历Iterator iterator = linkedList.iterator();while (iterator.hasNext()){Object next = iterator.next();System.out.println(next);}//如果面试的时候,你按照上面的写法 0分}
}//--------------------正确答案-----------------------------import java.util.LinkedList;public class MyStack {private LinkedList linkedList;MyStack(){linkedList = new LinkedList();}public void myAdd(Object object){linkedList.addFirst(object);}public Object myGet(){//如果用getFirst()方法获取的都是第一个元素
//        return linkedList.getFirst();return linkedList.removeFirst();}public boolean myIsEmpty(){return linkedList.isEmpty();}
}public class MyStackTest {public static void main(String[] args) {//创建自己定义的集合类MyStack myStack = new MyStack();//添加元素myStack.myAdd("hello");myStack.myAdd("world");myStack.myAdd("java");myStack.myAdd("bigdata");//        System.out.println(myStack.myGet());
//        System.out.println(myStack.myGet());
//        System.out.println(myStack.myGet());
//        System.out.println(myStack.myGet());//一不小心多写了一个会报错,没有实例元素
//        System.out.println(myStack.myGet()); //NoSuchElementExceptionwhile (!myStack.myIsEmpty()){Object o = myStack.myGet();String s = (String) o;System.out.println(s);}}
}

集合--ArrayList类、Vector类、LinkedList类、List集合练习相关推荐

  1. ArrayList、Vector、LinkedList的特点和区别

    ArrayList.Vector.LinkedList类均在java.util包中,均为可伸缩数组. 1)ArrayList和Vector都是基于存储元素的Object[] array来实现的,它们会 ...

  2. List接口实现类-ArrayList、Vector、LinkedList集合深入学习以及源代码解析

    学习List接口实现类 ArrayList  Vector  LinkedList List接口的实现类中最经常使用最重要的就是这三个:ArrayList.Vector.LinkedList. JDK ...

  3. java集合之列表:ArrayList、Vector、LinkedList

    1 package com.jdk7.chapter4; 2 3 import java.util.ArrayList; 4 import java.util.LinkedList; 5 import ...

  4. Java ArrayList和Vector、LinkedList与ArrayList、数组(Array)和列表集合(ArrayList)的区别...

    ArrayList和Vector的区别 ArrayList与Vector主要从二方面来说. 一.同步性: Vector是线程安全的,也就是说是同步的,而ArrayList是线程序不安全的,不是同步的. ...

  5. 详解Java中ArrayList、Vector、LinkedList三者的异同点

    转载:https://my.oschina.net/zzw922cn/blog/491631 一.ArrayList ArrayList是一个可以处理变长数组的类型,这里不局限于"数&quo ...

  6. ArrayList,Vector,LinkedList

    韩梦飞沙  韩亚飞  313134555@qq.com  yue31313  han_meng_fei_sha 数组列表 和 向量Vector, 都是使用数组方式存储. 向量 使用了 同步synchr ...

  7. 1.3 List集合:ArrayList和LinkedList类的用法及区别

    List集合: List 是一个有序.可重复的集合,集合中每个元素都有其对应的顺序索引. List 集合允许使用重复元素,可以通过索引来访问指定位置的集合元素. List 集合默认按元素的添加顺序设置 ...

  8. Java API —— ArrayList类 Vector类 LinkList类

    1.ArrayList类 1)ArrayList类概述 · 底层数据结构是数组,查询快,增删慢 · 线程不安全,效率高 2)ArrayList案例 · 存储字符串并遍历 · 存储自定义对象并遍历 2. ...

  9. ArrayList和LinkedList类的用法及区别

    List 是一个有序.可重复的集合,集合中每个元素都有其对应的顺序索引.List 集合允许使用重复元素,可以通过索引来访问指定位置的集合元素.List 集合默认按元素的添加顺序设置元素的索引,第一个添 ...

  10. java arraylist6_java 集合 ArrayList

    变量--容器 存储一个元素 数组--容器 一组具有某种特性的数据存放在一起: 存储一组元素(数据类型一致)长度固定 自己定义了Box(ArrayBox LinkedBox)--容器 存储一组元素 长度 ...

最新文章

  1. Controller类的方法上的RequestMapping一定要写在Controller类里吗?
  2. CCNA配置试验之三 EIGRP协议的配置
  3. 转:js-sdk探索之微信网页分享
  4. Linux通过XAMPP集成软件包搭建LAMPP环境
  5. 查询2021抚顺高考成绩,2021年抚顺高考状元是谁分数多少分,历年抚顺高考状元名单...
  6. 前端学习(809):api简介
  7. 16位和32位微处理器(3)——Pentium的先进技术
  8. 利用nodemailer发送邮件
  9. 高数基础 第七章 无穷级数
  10. SQL 从入门到精通
  11. 程序匠人 - 程序调试(除错)过程中的一些雕虫小技
  12. STM32L4系列单片机如何使用RTC唤醒定时器进入Standby低功耗模式并唤醒+整机功耗测试
  13. 自学python 经验学习心得分享
  14. mongodb数据库
  15. div中加入span右对齐后出现换行显示的两种解决办法(转)
  16. 京东数据库运维自动化体系建设之路
  17. Altium designer如何实现原理图和PCB交互式布局
  18. MFRC522读卡封装(附源代码)
  19. 走出abstract class与interface的困惑
  20. python 学生成绩表,生成数据表并且绘图

热门文章

  1. Oracle_11g_rac节点1正常,节点2长时间没有启动再次启动时无法启动_No asm libraries found in the system
  2. 计算机应用基全部概念,《计算机应用基》复习大纲.doc
  3. 【PR】音频处理及过度效果
  4. 港科百创 | 教授企业安建科技B轮融资¥1.8亿,开创半导体产业新势力!
  5. 小程序登录的AES加密解释
  6. 四百元以内哪种耳机音质好?2023便宜音质好的蓝牙耳机推荐
  7. HDU 5661 Claris and XOR
  8. jQuery阻止冒泡事件(单击事件执行了两次或多次)
  9. mac上打开rar文件
  10. 暗自较劲!华为OPPO这两款手机口碑飘红,究竟该怎么选?