黑马程序员——JAVA基础之List集合
------- android培训、java培训、期待与您交流!
----------
Collection :
|--List:元素是有序的,元素可以重复。因为该集合体系有索引。
|--ArrayList:底层的数据结构使用的是数组结构。特点:查询速度很快。但是增删稍慢。线程不同步。
|--LinkedList:底层使用的链表数据结构。特点:增删速度很快,查询稍慢。线程不同步。
|--Vector:底层是数组数据结构。线程同步。被ArrayList替代了。因为效率低。
|--Set:元素是无序,元素不可以重复。
List:
特有方法。凡是可以操作角标的方法都是该体系特有的方法。
增
add(index,element); 在列表的指定位置插入指定元素
addAll(index,Collection); 将指定 collection 中的所有元素都插入到列表中的指定位置
import java.util.ArrayList; public class ListDemo
{
public static void main(String[] args)
{
ArrayList al = new ArrayList(); al.add("01");
al.add("02");
al.add("03");
System.out.println(al); al.add(1,"04");
System.out.println(al); ArrayList al1 = new ArrayList(); al1.add("05");
al1.add("06");
System.out.println(al1); al.addAll(1,al1);
System.out.println(al);
}
}
删
remove(index); 移除列表中指定位置的元素
import java.util.ArrayList; public class ListDemo
{
public static void main(String[] args)
{
ArrayList al = new ArrayList(); al.add("01");
al.add("02");
al.add("03");
System.out.println(al); al.remove(1);
System.out.println(al); }
}
改
set(index,element); 用指定元素替换列表中指定位置的元素
import java.util.ArrayList; public class ListDemo
{
public static void main(String[] args)
{
ArrayList al = new ArrayList(); al.add("01");
al.add("02");
al.add("03");
System.out.println(al); al.set(1,"04");
System.out.println(al); }
}
查
get(index): 返回列表中指定位置的元素。
subList(from,to); 返回列表中指定的之间的部分,包含头不包含尾
listIterator(); 返回此列表元素的列表迭代器(按适当顺序)。
int indexOf(obj):获取指定元素的位置。
listIterator(int index); 返回列表中元素的列表迭代器(按适当顺序),从列表的指定位置开始。
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List; /**
*
* 获取集合中元素的方法演示
*
*/ public class ListDemo
{
public static void main(String[] args)
{
ArrayList al = new ArrayList(); al.add("01");
al.add("02");
al.add("03");
System.out.println(al); List sub = al.subList(0,2);
System.out.println(sub); System.out.println("01 对应的角标是:"+al.indexOf("01")); for (int i=0;i<al.size();i++)//方法一
{
System.out.println(al.get(i));
} for (Iterator it = al.iterator();it.hasNext(); )//方法2
{
System.out.println(it.next());
} }
}
List集合特有的迭代器。ListIterator是Iterator的子接口。
在迭代时,不可以通过集合对象的方法操作集合中的元素。因为会发生ConcurrentModificationException异常。所以,在迭代器时,只能用迭代器的方法操作元素,可是 Iterator方法是有限的,只能对元素进行判断,取出,删除的操作,如果想要其他的操作如添加,修改等,就需要使用其子接口,ListIterator。该接口只能通过List集合的listIterator方法获取。
import java.util.ArrayList;
import java.util.ListIterator; /**
*
* ListIterator演示
*
*/ public class ListDemo
{
public static void main(String[] args)
{
ArrayList al = new ArrayList(); al.add("01");
al.add("02");
al.add("03");
System.out.println(al); ListIterator li = al.listIterator();
System.out.println(li.hasNext());//判断后面有没有元素
System.out.println(li.hasPrevious());//判断前面有没有元素 //把集合里面的元素替换成另一种元素
while (li.hasNext())
{
Object obj = li.next(); if (obj.equals("02"))
li.set("04");
} System.out.println(li.hasNext());//判断后面有没有元素
System.out.println(li.hasPrevious());//判断前面有没有元素
System.out.println(al);
}
}
import java.util.ArrayList;
import java.util.Iterator; /**
* 去除ArrayList中的重复元素
* 定义一个临时容器储存
* 如果不相同存入,相同就不存
* 便利完成之后返回
*/
public class ArrayListTest
{
public static void main(String[] args)
{
ArrayList al = new ArrayList(); al.add("01");
al.add("02");
al.add("01");
al.add("04");
al.add("02");
System.out.println(al+"------"+al.size()); System.out.println(SingleElement(al));
} //定义一个函数,返回一个ArrayList集合,参数ArrayList。功能是去除ArrayList中的重复元素.
public static ArrayList SingleElement(ArrayList al)
{
ArrayList arrayBuffer = new ArrayList(); for (Iterator it = al.iterator();it.hasNext(); )
{
Object obj = it.next(); if (!arrayBuffer.contains(obj))
{
arrayBuffer.add(obj);
}
}
return arrayBuffer; } }
<span style="font-size:14px;"><strong></strong></span><pre class="java" name="code">import java.util.ArrayList;
import java.util.Iterator; /**
* 将自定义元素存到ArrayList结构中去,并去掉重复元素
* 比如:存人对象。同姓名同年龄,视为同一个人。为重复元素。
*
* 思路:
* 对人描述,将数据封装进人对象。
* 定义容器,将人存入。
* 取出。
* List集合判断元素是否相同,依据是元素的equals方法。
*/
public class ArrayListTest
{
public static void main(String[] args)
{
ArrayList al = new ArrayList(); al.add(new Person("zhangsan",13));
al.add(new Person("lisi",13));
al.add(new Person("zhangsan",13));
al.add(new Person("zhangsan",15));
al.add(new Person("lisi",13));
al.add(new Person("lisi",12)); al = singleElement(al); for (Iterator it = al.iterator();it.hasNext(); )
{
Person p = (Person)it.next();
System.out.println(p.getName()+"------"+p.getAge());
}
} //定义一个函数,返回ArrayList,参数ArrayList。函数功能去除ArrayList集合中的重复元素
public static ArrayList singleElement(ArrayList al)
{
ArrayList arrayBuffer = new ArrayList(); for (Iterator it = al.iterator();it.hasNext(); )
{
if (!arrayBuffer.contains(it.next()))
{
arrayBuffer.add(it.next());
}
}
return arrayBuffer;
}
} //声明一个Person对象,具有年龄和名字的属性
class Person
{
private String name;
private int age; Person(String name,int age)
{
this.name = name;
this.age = age;
} public boolean equals(Object obj)
{
if(!(obj instanceof Person))
return false;
Person p = (Person)obj;
return this.name.equals(p.name) && this.age == p.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;
}
}
LinkedList:特有方法:
addFirst(); 将指定元素插入此列表的开头。
addLast(); 将指定元素添加到此列表的结尾。
getFirst(); 返回此列表的第一个元素。
getLast(); 返回此列表的最后一个元素。
get方法获取元素,但不删除元素。如果集合中没有元素,会出现NoSuchElementException
removeFirst(); 移除并返回此列表的第一个元素。
removeLast(); 移除并返回此列表的最后一个元素。
remove方法获取元素,但是元素被删除。如果集合中没有元素,会出现NoSuchElementException
import java.util.LinkedList; /**
*
* LinkedList演示
*
*/ public class ListDemo
{
public static void main(String[] args)
{
LinkedList ll = new LinkedList(); ll.add("02");
ll.addFirst("01");
ll.addLast("03");
System.out.println(ll); System.out.println(ll.getFirst());
System.out.println(ll.getLast());
System.out.println(ll); System.out.println(ll.removeFirst());
System.out.println(ll.removeLast());
System.out.println(ll); //打印移出方式
while (!ll.isEmpty())
{
System.out.println(ll.removeLast());
}
}
}
在JDK1.6出现了替代方法:
offerFirst(); 在此列表的开头插入指定的元素。
offerLast(); 在此列表末尾插入指定的元素。
peekFirst(); 获取但不移除此列表的第一个元素;如果此列表为空,则返回 null。
peekLast(); 获取但不移除此列表的最后一个元素;如果此列表为空,则返回 null。
获取元素,但不删除元素。如果集合中没有元素,会返回null。
pollFirst(); 获取并移除此列表的第一个元素;如果此列表为空,则返回 null。
pollLast(); 获取并移除此列表的最后一个元素;如果此列表为空,则返回 null。
获取元素,但是元素被删除。如果集合中没有元素,会返回null。
堆栈和队列:
堆栈:先进后出 如同一个杯子。
队列:先进先出 First in First out FIFO 如同一个水管。
import java.util.LinkedList; /**
*
* 用LinkedList模拟一个堆栈结构的
*
*/ public class DuiZhanDemo
{
public static void main(String[] args)
{
DuiZhan dz = new DuiZhan(); dz.myAdd("01");
dz.myAdd("02");
dz.myAdd("03"); while (!dz.isNull())
{
System.out.println(dz.myGet());
}
}
} //堆栈结构:先进后出
class DuiZhan
{
private LinkedList link; DuiZhan()
{
link = new LinkedList();
} public void myAdd(Object obj)
{
link.addFirst(obj);
} public Object myGet()
{
return link.removeFirst();
} public boolean isNull()
{
return link.isEmpty();
}
}
------- android培训、java培训、期待与您交流!
----------
黑马程序员——JAVA基础之List集合的更多相关文章
- 黑马程序员——JAVA基础之Map集合
------- android培训.java培训.期待与您交流! ---------- Map集合: 该集合存储键值对.一对一对往里存.而且要保证键的唯一性. 和Set很像,其实Set底层就是使用了M ...
- 黑马程序员——JAVA基础之set集合
------- android培训.java培训.期待与您交流! ---------- Set: 元素是无序(存入和取出的顺序不一定一致),元素不可以重复. Set接口中常用的类: ...
- 黑马程序员——JAVA基础之简述集合collection
------- android培训.java培训.期待与您交流! ---------- 集合: 为什么出现集合类? • 面向对象语言对事物的体现都是以对象的形式,所以为了方便对多个对象的操作,就对对 ...
- 黑马程序员——JAVA基础之Vector集合
------- android培训.java培训.期待与您交流! ---------- 基本已被淘汰 枚举就是Vector特有的取出方式.枚举和迭代器很像.其实枚举和迭代是一样的. 因为枚举的名称 ...
- 黑马程序员----java基础笔记中(毕向东)
<p>------<a href="http://www.itheima.com" target="blank">Java培训.Andr ...
- 黑马程序员Java基础班+就业班课程笔记全发布(持续更新)
正在黑马学习,整理了一些课程知识点和比较重要的内容分享给大家,也是给自己拓宽一些视野,仅供大家交流学习,大家有什么更好的内容可以发给我 ,现有黑马教程2000G QQ 1481135711 这是我总 ...
- 黑马程序员----java基础笔记上(毕向东)
------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 笔记一共记录了毕向东的java基础的25天课程,分上.中.下 本片为上篇,涵盖前10天课程 1. ...
- 黑马程序员——JAVA基础之泛型和通配符
------- android培训.java培训.期待与您交流! ---------- 泛型: JDK1.5版本以后出现新特性.用于解决安全问题,是一个类型安全机制. 泛型好处: ...
- 黑马程序员——JAVA基础之简述面向对象,类,变量,匿名对象
------- android培训.java培训.期待与您交流! ---------- 面向对象: 面向对象是相对面向过程而言 面向对象和面向过程都是一种思想 面向过程 强调的是功能行为 面向对象 将 ...
随机推荐
- 创建和运行shell脚本程序
转载请标明http://www.cnblogs.com/winifred-tang94/ 要创建一个shell脚本程序,首先新建一个文本文件,然后在这个文本文件中按照shell编程规则输入shell命 ...
- js库之art.dialog
自适应内容 artDialog的特殊UI框架能够适应内容变化,甚至连外部程序动态插入的内容它仍然能自适应,因此你不必去考虑消息内容尺寸使用它.它的消息容器甚至能够根据宽度让文本居中或居左对齐——这一切 ...
- HDU 4737 A Bit Fun
题意:定义F(i,j)为数组a中从ai到aj的或运算,求使F(i,j)<m的对数. 思路:或运算具有单调性,也就是只增不减,如果某个时刻结果大于等于m了,那么再往后一定也大于等于m.所以可以用两 ...
- Note_Master-Detail Application(iOS template)_04_ YJYMasterViewController.h
//YJYMasterViewController.h #import <UIKit/UIKit.h> @classYJYDetailViewController; #import < ...
- C/C++整数除法以及保留小数位的问题
题目描述 Given two postive integers A and B, please calculate the maximum integer C that C*B≤A, and the ...
- struts2中form提交到action中的中文参数乱码问题解决办法(包括取中文路径)
我的前台页是这样的: <body> <form action="test.action" method="post"> ...
- 一个由印度人编写的VC串口类
http://www.cnblogs.com/lwngreat/p/4098374.html 软件介绍 一个由印度人编写的VC串口类(也是一种VC串口控件),他还配合这个类写了VC 串口通信方面的一些 ...
- swift系统学习第一章
第一节:变量,常量,类型推断,字符,字符串 //swift学习第一节 /* 变量 常量 类型推断 字符 字符串 */ import UIKit //变量 var str = "swift&q ...
- 学习进度条<第一周>
所花时间(包括上课):8小时(上课4,编程0.5,写博客1,读书2.5) 代码量:90行 博客量:4篇 了解到的知识点:什么是BUG 哪怕有几万分之一的概率也要考虑安全 ...
- 一、什么是WPF?
一.什么是WPF? Windows Presentation Foundation(以前的代号为“Avalon”)是 Microsoft 用于 Windows 的统一显示子系统,它通过 WinFX 公 ...