您的位置:首页 > 编程语言 > Java开发

JAVA基础再回首(十五)——List的三个子类、ArrayList类、Vector类、LinkedList类的使用与练习

2016-08-20 17:54 639 查看

JAVA基础再回首(十五)——List的三个子类、ArrayList类、Vector类、LinkedList类的使用与练习

版权声明:转载必须注明本文转自程序员杜鹏程的博客:http://blog.csdn.net/m366917

我们来继续学习集合

List的三个子类

List有三个子类对象

ArrayList类

Vector类

LinkedList类

我们先来了解一下它们各自的特点,然后再来详细的了解它们

ArrayList:

底层数据结构是数组,查询快,增删慢。

线程不安全,效率高。

Vector:

底层数据结构是数组,查询快,增删慢。

线程安全,效率低。

LinkedList:

底层数据结构是链表,查询慢,增删快。

线程不安全,效率高。

那么List的这三个儿子,我们到底应该用那个呢?下面我们就来一一分析。

ArrayList类的使用

//ArrayList的使用。 我们来存储字符串并遍历
public class ArrayListDemo {
public static void main(String[] args) {
// 创建集合对象
ArrayList array = new ArrayList();

// 创建元素对象,并添加元素
array.add("hello");
array.add("world");
array.add("java");

// 遍历
Iterator it = array.iterator();
while (it.hasNext()) {
String s = (String) it.next();
System.out.println(s);
}

System.out.println("-----------");

for (int x = 0; x < array.size(); x++) {
String s = (String) array.get(x);
System.out.println(s);
}
}
}


上面我们使用了两种方法对ArrayList集合进行了遍历,输出结果你肯定看出来了,对吧!



当然ArrayList集合也可以存储自定义对象并遍历,大家有空可以练习一下

Vector类的使用

Vector类它有特有的功能:是什么呢?

添加功能

public void addElement(Object obj)

获取功能

public Object elementAt(int index)

public Enumeration elements()

下面我们来看他的特有功能怎么使用

public class VectorDemo {
public static void main(String[] args) {
// 创建集合对象
Vector v = new Vector();

// 添加功能
v.addElement("hello");
v.addElement("world");
v.addElement("java");

// 遍历
for (int x = 0; x < v.size(); x++) {
String s = (String) v.elementAt(x);
System.out.println(s);
}

System.out.println("------------------");
//遍历
Enumeration en = v.elements(); // 返回的是实现类的对象
while (en.hasMoreElements()) {
String s = (String) en.nextElement();
System.out.println(s);
}
}
}


输出结果就不说了。细心的我们可以发现,第二种遍历的方法怎么像我们之前学的迭代器呢。没错

public Enumeration elements()就相当于我们现在的迭代器

所以在Enumeration接口中有两个方法

boolean hasMoreElements()

Object nextElement()

所以说它的用法和迭代器的使用方法相同,当然我们在使用中肯定会用迭代器而不用它了

LinkedList类的使用

在LinkedList类中,它也有自己特有的功能,下面我们来了解

添加功能

public void addFirst(Object e)

public void addLast(Object e)

获取功能

public Object getFirst()

public Obejct getLast()

删除功能

public Object removeFirst()

public Object removeLast()

我们发现上面的添加获取删除功能它们都有一个xxFirst和xxLast方法,这就是第一个和最后一个的意思啦,当然使用起来也很方便的。我们来用用你就知道了。

public class LinkedListDemo {
public static void main(String[] args) {
// 创建集合对象
LinkedList link = new LinkedList();

// 添加元素
link.add("hello");
link.add("world");
link.add("java");

link.addFirst("javaee");
System.out.println("addFirst:" + link);
link.addLast("android");
System.out.println("addLast:" + link);

System.out.println("getFirst:" + link.getFirst());

System.out.println("getLast:" + link.getLast());

System.out.println("removeFirst:" + link.removeFirst());
System.out.println("removeLast:" + link.removeLast());

// 输出对象名
System.out.println("link:" + link);
}
}


输出结果:是不是很容易理解



小练习

我们先来练习ArrayList

首先我们明确一下需求:ArrayList去除集合中字符串的重复值(字符串的内容相同)

public class ArrayListDemo {
public static void main(String[] args) {
// 创建集合对象
ArrayList array = new ArrayList();

// 添加多个字符串元素(包含内容相同的)
array.add("hello");
array.add("world");
array.add("java");
array.add("world");
array.add("java");
array.add("world");
array.add("world");
array.add("world");
array.add("world");
array.add("java");
array.add("world");

// 创建新集合
ArrayList newArray = new ArrayList();

// 遍历旧集合,获取得到每一个元素
Iterator it = array.iterator();
while (it.hasNext()) {
String s = (String) it.next();
// 拿这个元素到新集合去找,看有没有
if (!newArray.contains(s)) {
newArray.add(s);
}
}

// 遍历新集合
for (int x = 0; x < newArray.size(); x++) {
String s = (String) newArray.get(x);
System.out.println(s);
}
}
}


我们遍历了新的集合,得到的结果肯定没有重复的字符串了。

那么,假如我们的需求是:不能创建新的集合,就在以前的集合上做修改,那我们应该怎么做呢?

// 由选择排序思想引入,我们就可以通过这种思想做这个题目
// 拿0索引的依次和后面的比较,有就把后的干掉
// 同理,拿1索引...
for (int x = 0; x < array.size() - 1; x++) {
for (int y = x + 1; y < array.size(); y++) {
if (array.get(x).equals(array.get(y))) {
array.remove(y);
y--;
}
}
}

// 遍历集合
Iterator it = array.iterator();
while (it.hasNext()) {
String s = (String) it.next();
System.out.println(s);
}


我们来继续写一个LinkedList的练习题吧

/**
*自定义的栈集合
*/
public class MyStack {
private LinkedList link;

public MyStack() {
link = new LinkedList();
}

public void add(Object obj) {
link.addFirst(obj);
}

public Object get() {
return link.removeFirst();
}

public boolean isEmpty() {
return link.isEmpty();
}
}
/*
* MyStack的测试
*/
public class MyStackDemo {
public static void main(String[] args) {
// 创建集合对象
MyStack ms = new MyStack();

// 添加元素
ms.add("hello");
ms.add("world");
ms.add("java");

while(!ms.isEmpty()){
System.out.println(ms.get());
}
}
}


输出结果:

使用LinkedList模拟一个堆栈或者队列数据模式 堆栈:先进后出 队列:先进先出



好了,这篇我们就讲到这里吧。下篇我们来学习泛型

欢迎有兴趣的同学加我朋友的QQ群:点击直接加群555974449 请备注:java基础再回首我在群里等你。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐