List的类型和特点:

ArrayList:底层的数据结构使用的是数组结构。特点:查询的速度很快,但是增删稍慢 线程不同步

LinKedList:底层使用的链表数据结构。特点:增删的速度很快,查询稍慢

Vector:底层是数组数据结构,线程同步,被ArrayList替代.特点:枚举是Vector特有的取出方式

枚举

.其实枚举和迭代是一样的,因为枚举的名称以及方法都过长,所以被迭代器取代了,枚举郁郁而终了

LinkedList:

LinkedList:特有的方法  addFirst(),addLast(), getFirst(), getLast(),. removeFirst(), removeLast()

removeFirst():移除并返回第一个元素,如果此列表为空则抛出NoSuchElementException异常

poolFirst():获取并移除此列表的第一个元素,如果此列表为空,则返回null,不抛异常

在JDK1.6出现了替代方法。

offerFirst() , offerLast() , peekFirst() ,peekLast() , pollFirst () , pollLast()

LinkedList方法代码:

package sxy.List;

import java.util.LinkedList;

public class LinkedListDemo {

    public static void main(String[] args){

        LinkedList link1= new LinkedList();
link1.addFirst("apple1");
link1.addFirst("apple2");
link1.addFirst("apple3");
link1.addFirst("apple4"); sop(link1); //“遍历”
while(!link1.isEmpty()){
System.out.println(link1.removeFirst());
}
} public static void sop(Object obj){
System.out.println(obj);
} }

使用LinkedList模拟一个堆栈或者队列的数据结构。

堆栈:先进后出

队列:先进先出  First In First Out FIFO

典型例子(熟记):

package sxy.List;

import java.util.LinkedList;

class DuiLie{
private LinkedList link;
DuiLie(){
link = new LinkedList();
}
public void myAdd(Object obj){
link.addFirst(obj);
}
public Object myGet(){
return link.removeLast();
}
public boolean isNull(){
return link.isEmpty();
} }
public class LinkedListDemo2 { /**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
DuiLie dl = new DuiLie();
dl.myAdd("apple1");
dl.myAdd("apple2");
dl.myAdd("apple3");
dl.myAdd("apple4"); while(!dl.isNull()){
System.out.println(dl.myGet());
} } }

去掉ArrayList的中重复的元素:

package sxy.List;

import java.util.ArrayList;
import java.util.Iterator; public class TestArrayList { /**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub //去除ArrayList中的重复元素
ArrayList al = new ArrayList();
al.add("apple1");
al.add("apple2");
al.add("apple3");
al.add("apple3");
al.add("apple3");
al.add("apple4");
//打印原集合
sop(al);
//打印去重之后的集合
al = SingleElement(al);
sop(al); }
public static void sop(Object obj){
System.out.println(obj);
} public static ArrayList SingleElement(ArrayList al){
ArrayList al2 = new ArrayList();
Iterator it = al.iterator(); while(it.hasNext()){
Object obj = it.next();
if(!al2.contains(obj)){
al2.add(obj);
}
}
return al2;
} }

去除ArrayList中重复自定义对象:

将自定义对象作为元素存到ArrayList集合中,并除去重复元素

比如:存人对象。同姓名同年龄,视为同一个人。为重复元素

思路:

  1. 对人描述,将数据封装进人对象
  2. 定义容器,将人存入。
  3. 取出 、
package CollectionTest;

import java.util.ArrayList;
import java.util.Iterator; class Person{
private String name;
private int 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;
}
Person(String name,int age){
this.name=name;
this.age=age;
}
Person(){ } @Override
public boolean equals(Object obj) {//重写equals方法
Person per = (Person) obj;
if (per.getName().equals(this.name) && per.getAge() == this.age) {
return true;
}
return false;
}
} public class ArrayListDemo2 {
public static void main(String[] args) {
// TODO Auto-generated method stub
ArrayList<Person> al = new ArrayList();
al.add(new Person("lisi1",10));
al.add(new Person("lisi2",20));
al.add(new Person("lisi2",20));
al.add(new Person("lisi3",30));
al.add(new Person("lisi4",40));
al.add(new Person("lisi4",40)); al=SingleElement(al);
Iterator it = al.iterator();
while(it.hasNext()){
//向下转型
Person p = (Person) it.next();
System.out.println(p.getName()+"::"+p.getAge());
} }
public static ArrayList SingleElement(ArrayList al){
ArrayList arrNew = new ArrayList();
Iterator it = al.iterator();
while(it.hasNext()){
Object obj = it.next();
//在调用contains方法的时候调用equals方法
if(!arrNew.contains(obj)){
arrNew.add(obj);
}
}
return arrNew;
} }

equals和contains方法的区别:

最近用到了equals和contains两个方法,两个都有对比的意思,但区别呢?在网上找了些资料,似乎大概能分清了。
首先是文档上的内容:

public boolean equals(Object ob指示其他某个对象是否与此对象“相等”。

equals 方法在非空对象引用上实现相等关系:
  ● 自反性:对于任何非空引用值 x,x.equals(x) 都应返回 true。
  ● 对称性:对于任何非空引用值 x 和 y,当且仅当 y.equals(x) 返回 true 时,x.equals(y) 才应返回 true。
  ● 传递性:对于任何非空引用值 x、y 和 z,如果 x.equals(y) 返回 true,并且 y.equals(z) 返回 true,那么 x.equals(z) 应返回true。
  ● 一致性:对于任何非空引用值 x 和 y,多次调用 x.equals(y) 始终返回 true 或始终返回 false,前提是对象上 equals 比较中所用的信息没有被修改。
  ● 对于任何非空引用值 x,x.equals(null) 都应返回 false。
Object 类的 equals 方法实现对象上差别可能性最大的相等关系;即,对于任何非空引用值 x 和 y,当且仅当 x 和 y 引用同一个对象时,此方法才返回 true(x == y 具有值 true)。
注意:当此方法被重写时,通常有必要重写 hashCode 方法,以维护 hashCode 方法的常规协定,该协定声明相等对象必须具有相等的哈希码。
参数:
obj - 要与之比较的引用对象。
返回:
如果此对象与 obj 参数相同,则返回 true;否则返回 false。
contains
public boolean contains(CharSequence s)
当且仅当此字符串包含指定的 char 值序列时,返回 true。
参数:
s - 要搜索的序列
返回:
如果此字符串包含 s,则返回 true,否则返回 false
抛出:
NullPointerException - 如果 s 为 null
似乎有些难懂,尤其是equals的解释,下面是网友的解释内容:
equals是比较两个东西是否等同,这个适用于任何类别的对象
contains是是否包含的意思,那肯定.左边的对象是一个容器了
String现在也有一个contains,那是因为String是一个字符的容器
equals只能判断两个变量的值是否相等。
contains常用与集合中判断某个对象是否含有这个元素

l

List集合判断元素是否相同,依据的元素的equals方法

频繁的增删操作是LinkedList

Set:元素师无序的(存入和取出的顺序不一定一致),元素不可以重复

Set集合的功能和Collection是一致的

------HashSet:底层数据结构是哈希表

是如何保证元素的唯一性的呢?

是通过元素的两个方法,hashCode和equals来完成。如果元素的HashCode值相同,才会判断equals是否为true,如果元素的HashCode的值不相同,不会调用equals

------TreeSet:

集合框架(02)List的更多相关文章

  1. 阶段01Java基础day16集合框架02

    16.01_集合框架(去除ArrayList中重复字符串元素方式1) A:案例演示 需求:ArrayList去除集合中字符串的重复值(字符串的内容相同) 思路:创建新集合方式 /** * A:案例演示 ...

  2. Java 集合框架 02

    集合框架· LinkedList 和 泛型 去除ArrayList中重复字符串元素 * A:案例演示 * 需求:ArrayList去除集合中字符串的重复值(相同内容的字符串) * 思路:创建新集合方式 ...

  3. java集合框架02

    public class ListTest { public static void main(String[] args) { //创建几个新闻对象 News news1=new News(1, & ...

  4. java集合框架02——Collection架构与源码分析

    Collection是一个接口,它主要的两个分支是List和Set.如下图所示: List和Set都是接口,它们继承与Collection.List是有序的队列,可以用重复的元素:而Set是数学概念中 ...

  5. 20180826(02)-Java集合框架

    Java 集合框架 早在Java 2中之前,Java就提供了特设类.比如:Dictionary, Vector, Stack, 和Properties这些类用来存储和操作对象组. 虽然这些类都非常有用 ...

  6. 十五、Java基础---------集合框架体系以及List

    在介绍集合之前先说一下数组,正如我们所知,数组是某一类型数据的集合,强调的是数据,而且必须单一:集合框架的不同之处在于存储的数据类型没有任何限制,既可以存储基本数据类型(会自动提升为相应的包装类)也可 ...

  7. Java的集合框架

    01.为什么要使用集合框架? 解析:如果并不知道程序运行时会需要多少对象,或者需要更复杂方式存储对象,那么可以使用Java集合框架. 如果启用集合的删除方法,那么集合中所有元素的索引会自动维护. 集合 ...

  8. Java 集合系列 02 Collection架构

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

  9. JavaSE_ 集合框架 总目录(15~18)

    JavaSE学习总结第15天_集合框架1 15.01 对象数组的概述和使用15.02 对象数组的内存图解15.03 集合的由来及与数组的区别15.04 集合的继承体系图解15.05 Collectio ...

  10. JavaSE学习总结第15天_集合框架1

      15.01 对象数组的概述和使用 public class Student { // 成员变量 private String name; private int age; // 构造方法 publ ...

随机推荐

  1. django orm 的查询条件

    Django的ORM查询操作: 查询数据库操作是一个非常重要的技术.在Django中,查询一般就是使用filter.exclude.get三个方法来实现,在调用这些方法的时候传递不同的查询条件来实现复 ...

  2. nginx记录分析网站响应慢的请求(ngx_http_log_request_speed)

    nginx模块ngx_http_log_request_speed可以用来找出网站哪些请求很慢,针对站点很多,文件以及请求很多想找出哪些请求比较慢的话,这个插件非常有效.作者的初衷是写给自己用的,用来 ...

  3. nginx的入门到框架设计

    mac上安装nginx 安装与启动 安装 brew install nginx 命令 通过 Homebrew 下载的软件默认位置在 /usr/local/Cellar 应该ln-s 加连接就能全局 n ...

  4. RabbitMQ吞吐量测试-PerfTest上

    RabbitMQ吞吐量测试-PerfTest上 PerfTest RabbitMQ有一个基本的吞吐量测试工具PerfTest(文档,源代码和版本),它基于Java客户端,可以配置为模拟基本工作负载.P ...

  5. js中prop和attr区别

    首先 attr 是从页面搜索获得元素值,所以页面必须明确定义元素才能获取值,相对来说比较慢. 如: <input name='test' type='checkbox'> $('input ...

  6. NIO的介绍及使用(总结)

    传统的socket IO中,需要为每个连接创建一个线程,当并发的连接数量非常巨大时,线程所占用的栈内存和CPU线程切换的开销将非常巨大.使用NIO,不再需要为每个线程创建单独的线程,可以用一个含有限数 ...

  7. 记录string的妙用

    P1106 删数问题 摘要 --> 题目描述 键盘输入一个高精度的正整数N,去掉其中任意k个数字后剩下的数字按原左右次序将组成一个新的正整数.编程对给定的N和k,寻找一种方案使得剩下的数字组成的 ...

  8. 快来看看Google出品的Protocol Buffer,别只会用Json和XML了

    前言 习惯用 Json.XML 数据存储格式的你们,相信大多都没听过Protocol Buffer Protocol Buffer 其实 是 Google出品的一种轻量 & 高效的结构化数据存 ...

  9. [ CodeVS冲杯之路 ] P3117

    不充钱,你怎么AC? 题目:http://codevs.cn/problem/3117/ 啊啊啊,基础的高精度乘法被我写得又臭又长,以后再来优化代码(DP着哪天能够把加减乘除全部写一边贴上来,哦对还有 ...

  10. 花匠(NOIP2013)(神奇纯模拟)

    原题传送门 这是道很奇怪的题目,真不知道为什么要放到T2. 也许是T1太水了 首先先看题, 题目要求一个数列中下标为偶数的点比临近的下表为奇数的点更大或更小 其实就是说在原数组中找到一个最长的波动数列 ...