黑马程序员——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培训.期待与您交流! ---------- 面向对象: 面向对象是相对面向过程而言 面向对象和面向过程都是一种思想 面向过程 强调的是功能行为 面向对象 将 ...
随机推荐
- JVM-对象
1.对象的创建 当虚拟机遇到一条new指令时,首先去检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已经被加载.解析和初始化.如果没有,那必须先执行相应的类加 ...
- ACM - 概率、期望题目 小结(临时)
概率DP求期望大多数都是全期望公式的运用.主要思考状态空间的划分以及状态事件发生的概率.问题可以分为无环和有环两类.无环一类多数比较简单,可以通过迭代或者记忆化搜索完成.有环一类略复杂,可以通过假设方 ...
- sidePagination: "server"和responseHandler: responseHandler
bootstrapTable()中有两个属性 一个是sidePagination,表示服务器分页,responseHandler:responseHandler 表示回应操作的rows和total 两 ...
- hdu 2076
ps:WA了三次...第一次头脑有点乱,很麻烦的分几种情况讨论,第二次发现,只要分别算出时针和分针的角度,然后一减就行,却忽略了哪个大的问题,第三次加上了绝对值,就好了..就是以后double型比较最 ...
- 为什么socket编程要用到多线程
不得不佩服计算机先驱的设计:socket编程为什么需要多线程.如果只有一个ServerSocket线程,那么如下代码: public void start() throws Exception { S ...
- win下隐藏任务栏
C# 隐藏任务栏开始按钮 关闭shell 分类: .NET C# 2011-07-14 15:26 789人阅读 评论(1) 收藏 举报 shell任务c#stringnulluser 一.隐藏任务栏 ...
- 【LeetCode OJ】Pascal's Triangle II
Problem Link: http://oj.leetcode.com/problems/pascals-triangle-ii/ Let T[i][j] be the j-th element o ...
- MonogoDB的GirdFS
GirdFS是一种在MongoDB中存储大二进制文件的机制. mongofiles内置在MongoDB发布版中,可以用来在GridFS中上传.下载.列示.查找或删除文件. $ echo "H ...
- Qt Charts示例
Qt 5.7 有一些变化,把原来商业版的几个模块用GPLv3协议放到了社区版本里: Qt Charts (GPLv3) Qt Data Visualization (GPLv3) Qt Virtual ...
- Codechef2015 May - Chef and Strings (后缀自动机)
用后缀自动机统计出出现1~n次的串的数量f[i] 对于ans[k]=sigma(f[i]*C(i,k)) i>=k ; mo=; ..maxn] of dword; nt:..maxn,'a'. ...