当前位置: 首页 > news >正文

Java List集合

List本身是Collection接口的子接口,具备了Collection的所有方法。ListIterator是List集合特有的迭代器。ListIterator it = list.listIterator;//取代Iterator it = list.iterator;

List有序(元素存入集合的顺序和取出的顺序一致),元素都有索引。元素可以重复。

    |--ArrayList底层的数据结构是数组,线程不同步,ArrayList替代了Vector,查询元素的速度非常快。

    |--LinkedList底层的数据结构是链表,线程不同步,增删元素的速度非常快。

    |--Vector底层的数据结构就是数组,线程同步的,Vector无论查询和增删都巨慢。

 

可变长度数组的原理:

当元素超出数组长度,会产生一个新数组,将原数组的数据复制到新数组中,再将新的元素添加到新数组中。

ArrayList:是按照原数组的50%延长。构造一个初始容量为 10 的空列表。

Vector:是按照原数组的100%延长。

注意:对于list集合,底层判断元素是否相同,其实用的是元素自身的equals方法完成的。所以建议元素都要复写equals方法,建立元素对象自己的比较相同的条件依据。


1,ArrayList遍历:
import java.util.*;
 
public classTest{
 public static void main(String[] args) {
     List<String> list=new ArrayList<String>();
     list.add("Hello");
     list.add("World"); list.add("HAHAHAHA"); //第一种遍历方法使用foreach遍历List for (String str : list) { //也可以改写for(int i=0;i<list.size();i++)这种形式 System.out.println(str); } //第二种遍历,把链表变为数组相关的内容进行遍历 String[] strArray=new String[list.size()]; list.toArray(strArray); for(int i=0;i<strArray.length;i++) //这里也可以改写为 foreach(String str:strArray)这种形式  { System.out.println(strArray[i]); } //第三种遍历 使用迭代器进行相关遍历  Iterator<String> ite=list.iterator(); while(ite.hasNext())//判断下一个元素之后有值  { System.out.println(ite.next()); } } }

2,ArrayList去除集合中字符串的重复值
package com.hpioneer.collection;

import java.util.ArrayList;
import java.util.Iterator;

/**
 * @Description:
 * @Author: HPioneer
 * @CreateTime: 2018/5/7  19:03
 * @File: Demo_ArrayLits of JavaProject in com.hpioneer.collection
 * @FullFileName: com.hpioneer.collection.Demo_ArrayLits
 * @Create By IntelliJ
 * @Version: 1.0
 */
public class Demo_ArrayList {
    public static void main(String[] args) {
        ArrayList list = new ArrayList();
        list.add("a");
        list.add("a"); list.add("b"); list.add("b"); list.add("c"); list.add("c"); list.add("c"); list.add("c"); ArrayList newList = getSingle(list); System.out.println(newList); } public static ArrayList getSingle(ArrayList list) { ArrayList newList = new ArrayList<>(); //1,创建新集合 Iterator it = list.iterator(); //2,根据传入的集合(老集合)获取迭代器 while(it.hasNext()) { //3,遍历老集合 Object obj = it.next(); //记录住每一个元素 if(!newList.contains(obj)) { //如果新集合中不包含老集合中的元素 newList.add(obj); //将该元素添加  } } return newList; } }
 3,LinkedList模拟栈
package com.hpioneer.collection;

import java.util.LinkedList;
import java.util.Stack;

/**
 * @Description:
 * @Author: HPioneer
 * @CreateTime: 2018/5/8  21:14
 * @File: Demo_LinkedList of JavaProject in com.hpioneer.collection
 * @FullFileName: com.hpioneer.collection.Demo_LinkedList
 * @Create By IntelliJ
 * @Version: 1.0
 */
public class Demo_LinkedList {
    public static void main(String[] args) {
        LinkedList list = new LinkedList();
        list.addFirst("a");
        list.addFirst("b");
        list.addFirst("c");
        list.addFirst("d");
        list.addLast("e");
        System.out.println(list.get(0));
        System.out.println(list);
        while (!list.isEmpty()){
            System.out.println(list.removeLast());
        }

    }
}
4,ArrayList嵌套ArrayList
package com.hpioneer.collection;

import java.util.ArrayList;

/**
 * @Description:
 * @Author: HPioneer
 * @CreateTime: 2018/5/8  21:24
 * @File: Demo_ArrayLists of JavaProject in com.hpioneer.collection
 * @FullFileName: com.hpioneer.collection.Demo_ArrayLists
 * @Create By IntelliJ
 * @Version: 1.0
 */
public class Demo_ArrayLists {
    public static void main(String[] args) {
        ArrayList<ArrayList<Person>> list = new ArrayList<>();

        ArrayList<Person> first = new ArrayList<>();                //创建第一个班级
        first.add(new Person("杨幂", 30));
        first.add(new Person("李冰冰", 33));
        first.add(new Person("范冰冰", 20));

        ArrayList<Person> second = new ArrayList<>();
        second.add(new Person("黄晓明", 31));
        second.add(new Person("赵薇", 33));
        second.add(new Person("陈坤", 32));

        //将班级添加到学科集合中
        list.add(first);
        list.add(second);

        System.out.println(first);
        System.out.println(second);
        //遍历学科集合
        for(ArrayList<Person> a : list) {
            for(Person p : a) {
                System.out.println(p);
            }
        }
    }
}

引用的Person类为:

package com.hpioneer.collection;

/**
 * @Description:
 * @Author: HPioneer
 * @CreateTime: 2018/5/8  21:25
 * @File: Person of JavaProject in com.hpioneer.collection
 * @FullFileName: com.hpioneer.collection.Person
 * @Create By IntelliJ
 * @Version: 1.0
 */
public class Person {
    private String name;
    private int age;
    public Person() {
        super();

    }
    public Person(String name, int age) {
        super();
        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;
    }
    @Override
    public String toString() {
        return "Person [name=" + name + ", age=" + age + "]";
    }
    /*@Override
    public boolean equals(Object obj) {
        Person p = (Person)obj;
        return this.name.equals(p.name) && this.age == p.age;
    }*/
}

 

 
 
 

 

 

转载于:https://www.cnblogs.com/H---/p/9011056.html

相关文章:

  • C++11 lambda表达式与函数对象
  • 人人都能学会的python编程教程8:条件判断与循环
  • #考研#计算机文化知识1(局域网及网络互联)
  • homebridge安装问题解决
  • DesignPattern(三)结构型模式(上)
  • 八周一次课 10.23 linux任务计划cron 10.24 chkconfig工具 10.25 systemd管理服务 10.26 unit介绍 10.27 target介绍...
  • 最高优先级算法——进程调度
  • 前端小知识
  • 测试的方法!
  • springboot 项目mybatis plus 设置 jdbcTypeForNull (oracle数据库需配置JdbcType.NULL, 默认是Other)...
  • redis学习之redis的安装(linux)
  • Maven项目如何将自定义文件添加到META-INF目录下
  • 弹键盘动画
  • PHP 数据排序
  • 远程桌面,身份验证错误:要求的函数不正确等解决办法
  • 【腾讯Bugly干货分享】从0到1打造直播 App
  • 2017 年终总结 —— 在路上
  • 2019年如何成为全栈工程师?
  • 8年软件测试工程师感悟——写给还在迷茫中的朋友
  • Apache Pulsar 2.1 重磅发布
  • const let
  • CoolViewPager:即刻刷新,自定义边缘效果颜色,双向自动循环,内置垂直切换效果,想要的都在这里...
  • laravel 用artisan创建自己的模板
  • laravel5.5 视图共享数据
  • LeetCode29.两数相除 JavaScript
  • leetcode378. Kth Smallest Element in a Sorted Matrix
  • log4j2输出到kafka
  • OSS Web直传 (文件图片)
  • Python - 闭包Closure
  • Vue 动态创建 component
  • vue2.0开发聊天程序(四) 完整体验一次Vue开发(下)
  • 模型微调
  • 区块链将重新定义世界
  • 如何合理的规划jvm性能调优
  • 如何邀请好友注册您的网站(模拟百度网盘)
  • 入口文件开始,分析Vue源码实现
  • 扫描识别控件Dynamic Web TWAIN v12.2发布,改进SSL证书
  • 文本多行溢出显示...之最后一行不到行尾的解决
  • 我的面试准备过程--容器(更新中)
  • 一加3T解锁OEM、刷入TWRP、第三方ROM以及ROOT
  • 与 ConTeXt MkIV 官方文档的接驳
  • - 语言经验 - 《c++的高性能内存管理库tcmalloc和jemalloc》
  • CMake 入门1/5:基于阿里云 ECS搭建体验环境
  • mysql 慢查询分析工具:pt-query-digest 在mac 上的安装使用 ...
  • Play Store发现SimBad恶意软件,1.5亿Android用户成受害者 ...
  • 关于Android全面屏虚拟导航栏的适配总结
  • ​3ds Max插件CG MAGIC图形板块为您提升线条效率!
  • # 20155222 2016-2017-2 《Java程序设计》第5周学习总结
  • #etcd#安装时出错
  • (01)ORB-SLAM2源码无死角解析-(56) 闭环线程→计算Sim3:理论推导(1)求解s,t
  • (2)Java 简介
  • (LeetCode) T14. Longest Common Prefix
  • (附源码)ssm智慧社区管理系统 毕业设计 101635
  • (十五)devops持续集成开发——jenkins流水线构建策略配置及触发器的使用
  • (五) 一起学 Unix 环境高级编程 (APUE) 之 进程环境