三、List集合

特点

  • 有序,打印输出的顺序和添加时的顺序一致(不会帮你自动排序)
  • 有下标,可以通过下标的形式访问对象
  • 元素可以重复

方法

  • void add(int index,Object o) //在index位置插入元素
  • boolean addAll(int index,Collection c) //将一个集合中的元素添加到次集合中的index位置
  • Object get(int index) //返回集合中指定位置的元素
  • List subList(int fromIndex,int toIndex) //返回二者之间的元素
package com.zheng.demo1;

import java.util.ArrayList;
import java.util.ListIterator; public class MyList2 {
public static void main(String[] args) {
ArrayList list = new ArrayList();
list.add(2);
list.add(3);
list.add(1);
list.add(5);
list.add(2);
list.add(4); System.out.println("通过下标访问:" + list.get(0)); ListIterator listIterator = list.listIterator();
while (listIterator.hasNext()) {
System.out.println(listIterator.next());
}
}
}

listIterator:迭代器

hasNext(); 查看是否有下一个元素。有为true,无为false

  • next(); 取出下一个元素的值
  • hasPrevious();查看前一个元素是
  • previous();取出前一个元素
  • remove(); 删除当前元素
package com.zheng.demo1;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator; public class MyList {
public static void main(String[] args) {
//创建一个list集合容器
List list = new ArrayList(); //添加数据
list.add("1-小红");
list.add("2-小黑");
list.add("3-小青");
list.add("4-小紫"); System.out.println("当前集合大小" + list.size()); //一般的遍历
System.out.println("=========一般的遍历=======");
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i)); }
System.out.println("=========增强for循环遍历=======");
//增强for循环遍历
for (Object o : list) {
System.out.println(o); } System.out.println("=========一般的迭代器遍历=======");
//一般的迭代器遍历
Iterator iterator = list.iterator();
while (iterator.hasNext()) {
System.out.println(iterator.next());
} System.out.println("=========list迭代器从前到后遍历=======");
//list特有的
ListIterator listIterator = list.listIterator();
while (listIterator.hasNext()) {
String str = (String) listIterator.next();
System.out.println(str);
} System.out.println("=========list迭代器从后到前遍历=======");
while (listIterator.hasPrevious()) {
Object obj = listIterator.previous();
System.out.println(obj);
} }
}

List实现类

1、ArrayList【重点】

  • 数据结构实现,查询快(数组是连续的存储地址)。增删慢(每增加或者删除都要移动大量的数据。末尾快一点)
  • jdk1.2版本。运行效率高,线程不安全

2、Vector:

  • 数组结构,查询快,增删慢
  • jdk1.0版本,运行效率低,线程安全

3、LinkedList

  • 链表结构实现,增删快(不连续的存储空间,只需要改变节点之间的指向)查询慢
package com.zheng.demo1;

import java.util.LinkedList;
import java.util.ListIterator; public class MyLinkList { public void print(LinkedList<Student> students) {
//迭代器遍历
System.out.println("======迭代器遍历======");
ListIterator<Student> studentListIterator = students.listIterator();
while (studentListIterator.hasNext()) {
Student student = studentListIterator.next();
System.out.println(student);
}
} public static void main(String[] args) {
MyLinkList myLinkList = new MyLinkList(); //1、创建一个容器
LinkedList<Student> students = new LinkedList<>(); //2、创建对象
Student student1 = new Student(1, "小黑", "周口");
Student student2 = new Student(2, "小名", "沈丘");
Student student3 = new Student(3, "小郑", "范营乡");
Student student4 = new Student(4, "小芳", "666"); //3、将对象加入集合
students.add(student1);
students.add(student2);
students.add(student3);
students.add(student4); //查看
System.out.println(students.toString()); //调用迭代器遍历
myLinkList.print(students); //删除
System.out.println("=====删除某个元素=====");
students.remove(1);
myLinkList.print(students); }
}


四、泛型
jdk1.5中引入的新特性。本质是参数化类型,把类型当做参数传递

  • 泛型接口、泛型方法、泛型类
  • <T,…> T为占位符,表示一种引用类型
  • 优点:(1)、提高代码的复用。(2)、防止类型转换异常,提高代码的安全性

1、泛型类

泛型变量

  • 泛型作为传递的参数
  • 泛型作为方法的返回值

注意:

  • 泛型只能使用引用类型
  • 不同泛型类型对象之间不能相互赋值
package com.zheng.demo2;

//泛型类
public class MyGeneric<T> { T t;//1、泛型变量 //2、泛型作为传递的参数
public void show(T t) {
System.out.println(t);
} //3、泛型作为方法的返回值
public T getT() {
return t;
}
}
package com.zheng.demo2;

public class TestMyGeneric {

    public static void main(String[] args) {
//使用泛型类创建对象
MyGeneric<String> sm = new MyGeneric<>();
sm.t = "你好";
sm.show("呦呦呦");
System.out.println(sm.getT()); System.out.println("============="); MyGeneric<Integer> im = new MyGeneric<>();
im.t = 999;
im.show(666);
System.out.println(im.getT()); }
}

2、泛型接口

package com.zheng.demo2;

public interface MyInterface<T> {
T show(T t);
}

实现类

package com.zheng.demo2;

public class MyInterfaceImpl1 implements MyInterface<Integer>{

    @Override
public Integer show(Integer integer) {
return integer;
} public static void main(String[] args) {
MyInterfaceImpl1 impl1 = new MyInterfaceImpl1();
System.out.println(impl1.show(999));
} }


2、

package com.zheng.demo2;

public class MyInterfacetImpl implements MyInterface<String>{
public String show(String s) {
return s;
} public static void main(String[] args) {
MyInterface omf = new MyInterfacetImpl();
System.out.println(omf.show("hhhhhh"));
}
}


3、

package com.zheng.demo2;

public class MyInterfaceImpl2<T> implements MyInterface<T> {

    @Override
public T show(T t) {
return t;
} public static void main(String[] args) {
MyInterfaceImpl2<String> impl2 = new MyInterfaceImpl2<>();
System.out.println(impl2.show("daoajao"));
System.out.println("============");
MyInterfaceImpl2<Double> impl21 = new MyInterfaceImpl2<>();
System.out.println(impl21.show(520.1313));
}
}


3、泛型方法

package com.zheng.demo2;

public class MyGenericMethod {

    //泛型方法
public <T> T show(T t) {
System.out.println("泛型方法" + t);
return t;
} public static void main(String[] args) {
System.out.println(new MyGenericMethod().show(5));
System.out.println("=============");
System.out.println(new MyGenericMethod().show("哈哈哈哈"));
}
}

java集合框架复习----(2)List的更多相关文章

  1. java集合框架复习(一)

    数组类Array是java中最基本的一个存储结构,它用于存储 一组连续的对象或一组类型相同的基本类型的数据. Array特点:效率高,但容量固定且无法动态改变, 缺点:无法判断其中存有多少元素,len ...

  2. java集合框架复习

    数组类Array是java中最基本的一个存储结构,它用于存储 一组连续的对象或一组类型相同的基本类型的数据. Array特点:效率高,但容量固定且无法动态改变, 缺点:无法判断其中存有多少元素,len ...

  3. java集合框架复习----(3)Set

    文章目录 四.set集合 1.hashSet[重点] 2.TreeSet 四.set集合 无序.无下标.元素不可重复 1.hashSet[重点] == 数组+链表+红黑树== 基于hashcode计算 ...

  4. java集合框架复习----(1)

    文章目录 1 .集合框架思维导图 一.什么是集合 二.collection接口 1 .集合框架思维导图 一.什么是集合 存放在java.util.*.是一个存放对象的容器. 存放的是对象的引用,不是对 ...

  5. java集合框架复习----(4)Map、List、set

    文章目录 五.Map集合[重要] 1.hashMap 六.Collections工具类 总结 集合的概念 List集合 set集合: Map集合 Collection 五.Map集合[重要] 特点: ...

  6. 【java集合框架源码剖析系列】java源码剖析之java集合中的折半插入排序算法

    注:关于排序算法,博主写过[数据结构排序算法系列]数据结构八大排序算法,基本上把所有的排序算法都详细的讲解过,而之所以单独将java集合中的排序算法拿出来讲解,是因为在阿里巴巴内推面试的时候面试官问过 ...

  7. Java集合框架List,Map,Set等全面介绍

    Java集合框架的基本接口/类层次结构: java.util.Collection [I]+--java.util.List [I]   +--java.util.ArrayList [C]   +- ...

  8. Java集合框架练习-计算表达式的值

    最近在看<算法>这本书,正好看到一个计算表达式的问题,于是就打算写一下,也正好熟悉一下Java集合框架的使用,大致测试了一下,没啥问题. import java.util.*; /* * ...

  9. 【集合框架】Java集合框架综述

    一.前言 现笔者打算做关于Java集合框架的教程,具体是打算分析Java源码,因为平时在写程序的过程中用Java集合特别频繁,但是对于里面一些具体的原理还没有进行很好的梳理,所以拟从源码的角度去熟悉梳 ...

随机推荐

  1. 聊聊Spring事务控制策略以及@Transactional失效问题避坑

    大家好,又见面了. 在大部分涉及到数据库操作的项目里面,事务控制.事务处理都是一个无法回避的问题.比如,需要对SQL执行过程进行事务的控制与处理的时候,其整体的处理流程会是如下的示意: 首先是要开启事 ...

  2. [PostgreSql]生产级别数据库安装要考虑哪些问题?

    大家好,我是字母哥(coder)! 我让公司的小伙伴写一个生产级别的PostgreSQL的安装文档,结果他和我说:"不是用一个命令就能安装好么?还用写文档么?".我知道他想说的是这 ...

  3. Flume 组件安装配置

    下载和解压 Flume 实验环境可能需要回至第四,五,六章(hadoop和hive),否则后面传输数据可能报错(猜测)! 可 以 从 官 网 下 载 Flume 组 件 安 装 包 , 下 载 地 址 ...

  4. Linux之firewalld防火墙规则

    一, 什么是防火墙规则? 允许哪些服务端口被放行,怎么放行,及哪些服务端口被阻拦,如何阻拦的一组网络安全规则.支持ipv4和ipv6,且分为直接规则和富规则两种. 二, 如何管理firewalld 1 ...

  5. KingbaseES 数据库软件卸载

    关键字: KingbaseES.卸载   一.安装后检查 在安装完成后,可以通过以下几种方式进行安装正确性验证: 1. 查看安装日志,确认没有错误记录; 2. 查看开始菜单: 查看应用程序菜单中是否安 ...

  6. swagger访问url

    http://172.16.5.130:8080/swagger-ui.html 上面的ip:port 根据实际情况调换 如果设置了server.servlet.context-path 比如: se ...

  7. mysql explain总结

    Explain 包含字段 id select_type table type possible_keys key key_len ref rows extra 字段解释 1. id id 相同则执行顺 ...

  8. ASP.NET MVC 对于视图引擎的优化

    我经常使用asp.net MVC框架来做网站.总的来说,MVC框架是一个非常优秀的框架.相对于曾经的web form模式,我个人感觉分工更加合理思路也更加清晰,但是交给开发人员的工作也相对变多了. 当 ...

  9. 【疑难杂症】关于用pydotplus生成iris.pdf报错问题

    在使用刘建平老师博客中DecisionTreeClassifier实例时,遇到报错:InvocationException: GraphViz's executables not found 源代码如 ...

  10. Elasticsearch 快照生命周期管理 (SLM) 实战指南

    文章转载自:https://mp.weixin.qq.com/s/PSfgPJc4dKN2pOZd0Y02wA 1.Elasticsearch 保证高可用性的方式 Elasticsearch 保证集群 ...