java:对象数组;Collection集合及常用方法,迭代器及增强for循环;List集合特点及方法,ArrayList使用及底层原理,数据结构,LinkedList使用及底层原理

本文主要是介绍java:对象数组;Collection集合及常用方法,迭代器及增强for循环;List集合特点及方法,ArrayList使用及底层原理,数据结构,LinkedList使用及底层原理,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1 对象数组

1 对象数组

案例需求
创建一个长度为3的数组,存入三个女朋友对象,假设女朋友的属性为:姓名和年龄。

代码实现

女朋友类

public class GirlFriend {private String name;private int age;public GirlFriend() {}public GirlFriend(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;}
}

测试类

public class GirlFriendTest {public static void main(String[] args) {//需求:创建一个长度为3的数组,存入三个女朋友对象,假设女朋友的属性为:姓名和年龄。//1.创建一个数组。GirlFriend[] arr = new GirlFriend[3];//2.创建三个GirlFriend的对象GirlFriend gf1 = new GirlFriend("小诗诗",18);GirlFriend gf2 = new GirlFriend("小丹丹",17);GirlFriend gf3 = new GirlFriend("小惠惠",16);//3.把三个GirlFriend的对象存入到数组当中arr[0] = gf1;arr[1] = gf2;arr[2] = gf3;//4.遍历数组for (int i = 0; i < arr.length; i++) {GirlFriend gf = arr[i];System.out.println(gf.getName() + "---" + gf.getAge());}}
}

2 对象数组的内存图

对象数组,数组中保存的每一个对象的内存地址值
在这里插入图片描述

2 Collection集合

1 集合和数组的区别

  • 数组的长度是固定的,集合的长度是可变的
  • 数组既可以存储基本数据类型,也可以存储引用数据类型.集合只能存储引用数据类型(如果存储基本数据类型,需要使用基本数据类型对应的包装类
  • 基本类型对应的包装类
    在这里插入图片描述
    2 集合体系结构
  • 集合体系结构
    在这里插入图片描述
    3 Collection常用方法
  • 常用方法
    在这里插入图片描述
  • 示例代码
public class MyCollection1 {public static void main(String[] args) {
//        boolean add(E e)            添加元素
//        boolean remove(Object o)    从集合中移除指定的元素
//        void clear()                清空集合
//        boolean contains(Object o)  判断集合中是否存在指定的元素
//        boolean isEmpty()           判断集合是否为空
//        int size()                  集合的长度,也就是集合中元素的个数//method1();//method2();//method3();//method4();//method5();//method6();method7();}private static void method7() {//1,创建集合对象Collection<String> list = new ArrayList<>();//2.获取集合的长度int size1 = list.size();System.out.println(size1);//0//3.添加元素list.add("aaa");list.add("bbb");list.add("ccc");list.add("ccc");list.add("ccc");//4.获取集合的长度int size2 = list.size();System.out.println(size2);//5}private static void method6() {//1,创建集合对象Collection<String> list = new ArrayList<>();//2.判断集合是否为空boolean empty1 = list.isEmpty();System.out.println(empty1);//true//3.添加元素list.add("aaa");list.add("bbb");list.add("ccc");//4.再次判断集合是否为空boolean empty2 = list.isEmpty();System.out.println(empty2);//false//5.调用一下clear方法来清空集合list.clear();//6.再次判断集合是否为空boolean empty3 = list.isEmpty();System.out.println(empty3);//true}private static void method5() {//1,创建集合对象Collection<String> list = new ArrayList<>();//2.添加元素list.add("aaa");list.add("bbb");list.add("ccc");//3.判断集合中是否存在指定的元素boolean result1 = list.contains("ccc");System.out.println(result1);//true//4.判断集合中是否存在指定的元素boolean result2 = list.contains("ddd");System.out.println(result2);//false}private static void method4() {//1,创建集合对象Collection<String> list = new ArrayList<>();//2.添加元素list.add("aaa");list.add("bbb");list.add("ccc");//3.打印集合System.out.println("清空前" + list);//[aaa, bbb, ccc]//4.清空集合list.clear();//5.打印集合System.out.println("清空后" + list);//集合里面什么都没有了.}private static void method3() {//1,创建集合对象Collection<String> list = new ArrayList<>();//2.添加元素list.add("aaa");list.add("bbb");list.add("ccc");//3.打印集合System.out.println("删除前" + list);//[aaa, bbb, ccc]//4.删除dddboolean result = list.remove("ddd");System.out.println(result);//false --- 表示本次删除失败//5.打印集合System.out.println("删除后" + list);//[aaa, bbb, ccc]}private static void method2() {//1,创建集合对象Collection<String> list = new ArrayList<>();//2.打印集合System.out.println("添加前" + list);//3.添加元素boolean result1 = list.add("aaa");boolean result2 = list.add("bbb");boolean result3 = list.add("ccc");System.out.println(result1);//trueSystem.out.println(result2);//trueSystem.out.println(result3);//true//list.add(new GirlFriend());//4.打印集合System.out.println("添加后" + list);}private static void method1() {//1.如何创建集合对象//Collection list = new Collection();//错误的,Collection是一个接口,不能直接创建对象//jdk7以前的写法Collection<String> list1 = new ArrayList<String>();//jdk7省略Collection<String> list2 = new ArrayList<>();}
}

4 遍历集合-迭代器

  • 迭代器接口: Iterator
  • 获取迭代器接口实现类对象: Collection集合中的Iterator()方法
  • Iterator接口常用方法
    boolean hasNext() 判断迭代器中是否还有元素
    E next() 获取元素
  • 示例代码
public class MyCollection2 {public static void main(String[] args) {Collection<String> list = new ArrayList<>();//添加元素list.add("a");list.add("b");list.add("c");list.add("d");list.add("e");list.add("e");list.add("e");list.add("e");list.add("e");list.add("e");list.add("e");//获取迭代器对象//默认指向集合的0索引位置Iterator<String> it = list.iterator();/* //hasNext --- 判断当前指向的位置是否有元素可以被取出System.out.println(it.hasNext());//true//next --- 获取当前位置的元素,把迭代器往后移动一个位置System.out.println(it.next());//aSystem.out.println(it.next());//bSystem.out.println(it.next());//cSystem.out.println(it.next());//dSystem.out.println(it.next());//eSystem.out.println(it.next());*/while(it.hasNext()){String element = it.next();System.out.println(element);}}
}

5 遍历集合-迭代器原理图解

  • Iterator iterator() : 创建迭代器对象,默认指向当前集合的0索引
  • boolean hasNext(): 判断当前位置是否有元素可以被取出
  • E next(): 获取当前位置的元素,并将迭代器对象移向下一个索引位置
  • hasNext()方法判断是否还有元素
    在这里插入图片描述
  • next() 方法获取元素
    在这里插入图片描述
    6 遍历集合- 增强for循环
  • 他是JDK5之后出现的,其内部原理是一个Iterator迭代器
  • 实现Iterator接口的类才可以使用迭代器和增强for(可以遍历数组和集合)
  • 定义格式
for(数据类型 变量名 : 数组或集合对象){循环体;
}
  • 示例代码
public class MyCollection3 {public static void main(String[] args) {Collection<String> list = new ArrayList<>();//添加元素list.add("a");list.add("b");list.add("c");list.add("d");//使用增强for进行遍历for(String str : list){//str依次表示集合中的每一个元素System.out.println(str);}}
}

7 集合练习-集合中保存学生对象并遍历

  • 案例需求: 创建集合对象,保存多个学生对象并遍历
  • 代码实现
    Student 类
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;}
}

测试类

public class MyCollection5 {public static void main(String[] args) {//创建Collection集合对象Collection<Student> list = new ArrayList<>();//创建学生对象Student s1 = new Student("西门学吹牛",23);Student s2 = new Student("西门学吹水",25);Student s3 = new Student("aaa",29);//把学生添加到集合list.add(s1);list.add(s2);list.add(s3);//遍历集合(迭代器)Iterator<Student> it = list.iterator();while(it.hasNext()){Student stu = it.next();System.out.println(stu.getName() + "---" + stu.getAge());}System.out.println("=======================");//遍历集合(增强for)for (Student student : list) {System.out.println(student.getName() + "---" + student.getAge());}}
}

3 List集合

1 List集合的特点

  • 元素存取有序
  • 可以存储重复元素
  • 有索引

2 List特有方法

  • 常用方法
    在这里插入图片描述

  • 示例代码

public class MyList1 {public static void main(String[] args) {//void add(int index,E element)     在此集合中的指定位置插入指定的元素//E remove(int index)               删除指定索引处的元素,返回被删除的元素//E set(int index,E element)        修改指定索引处的元素,返回被修改的元素//E get(int index)                  返回指定索引处的元素//1.创建集合对象List<String> list = new ArrayList<>();//2.添加元素list.add("aaa");list.add("bbb");list.add("ccc");//3.获取0索引上的元素String element = list.get(0);//System.out.println(element);//aaa//针对于List集合,又多了一种遍历方式.普通for循环for (int i = 0; i < list.size(); i++) {String s = list.get(i);System.out.println(s);}}private static void method3() {//1.创建集合对象List<String> list = new ArrayList<>();//2.添加元素list.add("aaa");list.add("bbb");list.add("ccc");//3.修改元素//修改指定索引处的元素.返回被修改的元素.String s = list.set(0, "qwer");System.out.println(s);//aaa//4.打印集合System.out.println(list);//[qwer, bbb, ccc]}private static void method2() {//1.创建集合对象List<String> list = new ArrayList<>();//2.添加元素list.add("aaa");list.add("bbb");list.add("ccc");//3.删除元素//根据指定的索引进行删除,会把删除的元素进行返回.String s = list.remove(0);System.out.println(s);//aaa//4.打印集合System.out.println(list);//[bbb, ccc]}private static void method1() {//1.创建集合对象List<Integer> list = new ArrayList<>();//2.添加元素list.add(1);list.add(2);list.add(3);//利用List里面的特有方法添加元素void add(int index,E element)//在指定位置添加元素,原来的元素,依次往后移动一个位置.list.add(0,10);//3.打印集合System.out.println(list);//[10, 1, 2, 3]}
}

3 ArrayList基本使用

  • ArrayList集合是最常用的单列集合之一.可以使用Collection和List中的所有方法
  • 底层是数据结构实现的,查询快,增删慢
  • 示例代码
    Student类
public class Student {private String name;private int age;private int score;public Student() {}public Student(String name, int age, int score) {this.name = name;this.age = age;this.score = score;}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;}public int getScore() {return score;}public void setScore(int score) {this.score = score;}
}

测试类

/*需求:创建一个ArrayList集合,存入三个学生对象。学生对象的属性为:姓名,年龄,考试成绩。打印考试成绩比平均分低的所有学生信息。
*/
public class MyArrayList1 {public static void main(String[] args) {//1.写一个Student类.属性:name age score//2.创建一个ArrayList集合ArrayList<Student> list = new ArrayList<>();//3.创建学生对象Student s1 = new Student("张三",18,100);Student s2 = new Student("lisi",20,60);Student s3 = new Student("王五",19,80);//4.把学生对象添加到集合中list.add(s1);list.add(s2);list.add(s3);//5.求平均分int sum = 0;for (Student student : list) {//student依次表示集合中的每一个学生对象sum = sum + student.getScore();}//当循环结束之后,就表示总分已经求出来了.int avg = sum / list.size();//System.out.println(avg);//6.遍历集合,获取每一个学生的成绩,打印比平均分低的学生信息for (Student student : list) {if(student.getScore() < avg){System.out.println(student.getName() + "---" + student.getAge() + "---" + student.getScore());}}}
}

4 数据结构-栈和队列
在这里插入图片描述
5 数据结构-数组和链表
在这里插入图片描述
在这里插入图片描述
** 6 ArrayList底层原理图解**

  • ArrayList底层是数组结构实现的,查询快增删慢
  • 初始会创建一个长度为10的数组,可以添加数据。如果添加满了,会自动扩容为原来的1.5倍,将原数组的数据拷贝到新数组中,剩余位置继续添加新的元素!
    在这里插入图片描述
    ** 7 LinkedList基本使用**
  • LinkedList集合底层是链表结构实现的,查询慢增删快
  • 示例代码
public class MyLinkedList1 {public static void main(String[] args) {//使用LinkedList完成存储字符串并用三种方式进行遍历//1.创建集合LinkedList<String> list = new LinkedList<>();//2,添加元素list.add("钢门吹雪");list.add("西域狂鸭");list.add("西门吹牛");list.add("洗浴K歌一条龙");//3.遍历(迭代器 --- 所有的单列集合都可以使用的)Iterator<String> it = list.iterator();while(it.hasNext()){String element = it.next();System.out.println(element);}System.out.println("==================");//遍历(增强for --- 所有的单列集合还有数组)for (String s : list) {System.out.println(s);}System.out.println("==================");for (int i = 0; i < list.size(); i++) {String element = list.get(i);System.out.println(element);}}
}

8 LinkedList特有方法

  • 特有方法
    在这里插入图片描述
  • 示例代码
public class MyLinkedList2 {public static void main(String[] args) {//1.创建集合对象LinkedList<String> list = new LinkedList<>();//2.添加元素list.add("a");list.add("b");list.add("c");System.out.println("删除前" + list);//3.removeFirst​()      从此列表中删除并返回第一个元素String first = list.removeFirst();System.out.println(first);//removeLast​()         从此列表中删除并返回最后一个元素String last = list.removeLast();System.out.println(last);System.out.println("删除后" + list);}private static void method2() {//1.创建集合对象LinkedList<String> list = new LinkedList<>();//2.添加元素list.add("a");list.add("b");list.add("c");//3.getFirst​ 返回此列表中的第一个元素String first = list.getFirst();System.out.println(first);//a//getLast​()   返回此列表中的最后一个元素String last = list.getLast();System.out.println(last);//c}private static void method1() {//1.创建集合对象LinkedList<String> list = new LinkedList<>();//2.添加元素list.add("a");list.add("b");list.add("c");//3.addFirst​(E e)   在该列表开头插入指定的元素list.addFirst("QQQ");//addLast(E e)      将指定的元素追加到此列表的末尾list.addLast("www");//4.打印集合System.out.println(list);}
}

** 9 LinkedList底层原理图解**

  • LinkedList底层采用双向链表结构实现
    在这里插入图片描述

这篇关于java:对象数组;Collection集合及常用方法,迭代器及增强for循环;List集合特点及方法,ArrayList使用及底层原理,数据结构,LinkedList使用及底层原理的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/320899

相关文章

C++使用栈实现括号匹配的代码详解

《C++使用栈实现括号匹配的代码详解》在编程中,括号匹配是一个常见问题,尤其是在处理数学表达式、编译器解析等任务时,栈是一种非常适合处理此类问题的数据结构,能够精确地管理括号的匹配问题,本文将通过C+... 目录引言问题描述代码讲解代码解析栈的状态表示测试总结引言在编程中,括号匹配是一个常见问题,尤其是在

Java实现检查多个时间段是否有重合

《Java实现检查多个时间段是否有重合》这篇文章主要为大家详细介绍了如何使用Java实现检查多个时间段是否有重合,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录流程概述步骤详解China编程步骤1:定义时间段类步骤2:添加时间段步骤3:检查时间段是否有重合步骤4:输出结果示例代码结语作

Nginx设置连接超时并进行测试的方法步骤

《Nginx设置连接超时并进行测试的方法步骤》在高并发场景下,如果客户端与服务器的连接长时间未响应,会占用大量的系统资源,影响其他正常请求的处理效率,为了解决这个问题,可以通过设置Nginx的连接... 目录设置连接超时目的操作步骤测试连接超时测试方法:总结:设置连接超时目的设置客户端与服务器之间的连接

Java中String字符串使用避坑指南

《Java中String字符串使用避坑指南》Java中的String字符串是我们日常编程中用得最多的类之一,看似简单的String使用,却隐藏着不少“坑”,如果不注意,可能会导致性能问题、意外的错误容... 目录8个避坑点如下:1. 字符串的不可变性:每次修改都创建新对象2. 使用 == 比较字符串,陷阱满

Java判断多个时间段是否重合的方法小结

《Java判断多个时间段是否重合的方法小结》这篇文章主要为大家详细介绍了Java中判断多个时间段是否重合的方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录判断多个时间段是否有间隔判断时间段集合是否与某时间段重合判断多个时间段是否有间隔实体类内容public class D

Python使用国内镜像加速pip安装的方法讲解

《Python使用国内镜像加速pip安装的方法讲解》在Python开发中,pip是一个非常重要的工具,用于安装和管理Python的第三方库,然而,在国内使用pip安装依赖时,往往会因为网络问题而导致速... 目录一、pip 工具简介1. 什么是 pip?2. 什么是 -i 参数?二、国内镜像源的选择三、如何

使用C++实现链表元素的反转

《使用C++实现链表元素的反转》反转链表是链表操作中一个经典的问题,也是面试中常见的考题,本文将从思路到实现一步步地讲解如何实现链表的反转,帮助初学者理解这一操作,我们将使用C++代码演示具体实现,同... 目录问题定义思路分析代码实现带头节点的链表代码讲解其他实现方式时间和空间复杂度分析总结问题定义给定

IDEA编译报错“java: 常量字符串过长”的原因及解决方法

《IDEA编译报错“java:常量字符串过长”的原因及解决方法》今天在开发过程中,由于尝试将一个文件的Base64字符串设置为常量,结果导致IDEA编译的时候出现了如下报错java:常量字符串过长,... 目录一、问题描述二、问题原因2.1 理论角度2.2 源码角度三、解决方案解决方案①:StringBui

Linux使用nload监控网络流量的方法

《Linux使用nload监控网络流量的方法》Linux中的nload命令是一个用于实时监控网络流量的工具,它提供了传入和传出流量的可视化表示,帮助用户一目了然地了解网络活动,本文给大家介绍了Linu... 目录简介安装示例用法基础用法指定网络接口限制显示特定流量类型指定刷新率设置流量速率的显示单位监控多个

Java覆盖第三方jar包中的某一个类的实现方法

《Java覆盖第三方jar包中的某一个类的实现方法》在我们日常的开发中,经常需要使用第三方的jar包,有时候我们会发现第三方的jar包中的某一个类有问题,或者我们需要定制化修改其中的逻辑,那么应该如何... 目录一、需求描述二、示例描述三、操作步骤四、验证结果五、实现原理一、需求描述需求描述如下:需要在