List是一个接口,ArrayList和LinkedList是两个实现类,他们实现的方式不一样,其实LinkedList才是真正的链表(如果不清楚什么是链表,需要了解一下相关数据结构的知识,这不是一两句话能说清楚的),而ArrayList是用数组实现的,它不是真正的链表,在初始化的时候它先对数组设置一个初始容量,当数组空间不够的时候,它会重新构建一个容量更大的数组,然后把先前的元素拷贝进去。
ArrayList和LinkedList本质上的区别就是数组和列表这两种数据结构的区别。课参阅相关数据结构的知识。
我这里简单的为你归纳几点:
ArrayList:缺点:内存使用量要大一些,添加删除元素效率较低。元素随机访问的效率较高。
LinkedList:相反。
================================================
List and ArrayList:
1、List是一个接口,ArrayList是一个实现了List接口的具体类。 他们是父子关系,我们常用的是ArrayList,但常用List的引用去操作ArrayList 这是一个简单的面向接口编程的一种,如:List myList = new ArrayList();
2、他们主要是用来保存对象的集合,记得是保存对象的哦,你可别传个int进去啊
3、要取出它里面保存的对象可以用下标,如:Object aaa = myList.get(0); 这样我们就把保存在myList里的第一个对象取出来给了 aaa 啦。
ArrayList:
ArrayList其实是包装了一个数组Object[],当实例化一个ArrayList时,一个数组也被实例化,当向ArrayList中添加对象是,数组的大小也相应的改变。这样就带来以下有特点:
快速随即访问 你可以随即访问每个元素而不用考虑性能问题,通过调用get(i)方法来访问下标为i的数组元素。
向其中添加对象速度慢 当你创建数组是并不能确定其容量,所以当改变这个数组时就必须在内存中做很多事情。
操作其中对象的速度慢 当你要想数组中任意两个元素中间添加对象时,数组需要移动所有后面的对象。
LinkList:
LinkedList是通过节点直接彼此连接来实现的。每一个节点都包含前一个节点的引用,后一个节点的引用和节点存储的值。当一个新节点插入时,只需要修改其中保持先后关系的节点的引用即可,当删除记录时也一样。这样就带来以下有特点:
操作其中对象的速度快 只需要改变连接,新的节点可以在内存中的任何地方
不能随即访问 虽然存在get()方法,但是这个方法是通过遍历接点来定位的所以速度慢。
一些结论:
当一些被定义好的数据需要放到与数组对应的List中,ArrayList是很好的选择,因为它可以动态变化,但是不要在整个应用程序中频繁的使用。
你要很方便的操作其中的数据而不用随即访问时;LinkList是很好的选择。如果你要频繁随机访问建议使用ArrayList。
==================================================
java.util.ArrayList类实现了java.util.List接口,ArrayList使用使用数组结构实现List数据结构
如果经常从容器中作删除或插入对象的动作,则使用java.util.LinkedList会获得较好的效率
//StringStack.java
package singwin;
import java.util.*;
public class StringStack {
private LinkedList<String> linkedList;
public StringStack()
{
linkedList=new LinkedList<String>();
}
public void push(String name)
{
//add element into list's head
linkedList.addFirst(name);
}
public String top()
{//get the first element of this list
return linkedList.getFirst();
}
public String pop()
{
//remove the first element from this list
return linkedList.removeFirst();
}
public boolean isEmpty()
{
//is this list empty
return linkedList.isEmpty();
}
}
//StirngStackDemo.java
package singwin;
import java.util.Scanner;
public class StringStackDemo
{
public static void main(String [] args)
{
Scanner scanner=new Scanner(System.in);
StringStack stack=new StringStack();
System.out.println("input name ,and key in quit to the end");
while(true)
{
System.out.print("#");
String input=scanner.next();
if (input.equals("quit"))
break;
stack.push(input);
}
System.out.print("显示输入:");
while(!stack.isEmpty())
{
System.out.print(stack.pop()+" ");
}
System.out.println();
}
}
package singwin;
import java.util.*;
public class ListTest {
public static void main(String []args)
{
Scanner scanner=new Scanner(System.in);
//List<String> list=new ArrayList<String>();//当输入String型数据时
List<Integer> list=new ArrayList<Integer>();
System.out.println("please input name(key in -1 to the end)");
while(true)
{
System.out.print(":");
//String input=scanner.next();//当输入String型数据时
Integer input=scanner.nextInt();
if (input.equals(-1))
break;
list.add(input);
}
System.out.print("display your input:");
//使用Iterator及其iterator.hasNext()方法输出
Iterator iterator=list.iterator();//use iterator to get a element
while(iterator.hasNext())//is exist the next element
{
System.out.print(iterator.next()+"\t");
}
//也可使用增强的for()循环来输出
//for(Integer s:list)
// System.out.print(s+"\t");
/*还可使用for循环和list.size()方法输出
for(int i=0;i<list.size();i++)
System.out.print(list.get(i)+"\t");
*/
System.out.println("end.");
}
}
====================================================
ArrayList和LinkedList本质上的区别就是数组和列表这两种数据结构的区别。课参阅相关数据结构的知识。
我这里简单的为你归纳几点:
ArrayList:缺点:内存使用量要大一些,添加删除元素效率较低。元素随机访问的效率较高。
LinkedList:相反。
================================================
List and ArrayList:
1、List是一个接口,ArrayList是一个实现了List接口的具体类。 他们是父子关系,我们常用的是ArrayList,但常用List的引用去操作ArrayList 这是一个简单的面向接口编程的一种,如:List myList = new ArrayList();
2、他们主要是用来保存对象的集合,记得是保存对象的哦,你可别传个int进去啊
3、要取出它里面保存的对象可以用下标,如:Object aaa = myList.get(0); 这样我们就把保存在myList里的第一个对象取出来给了 aaa 啦。
ArrayList:
ArrayList其实是包装了一个数组Object[],当实例化一个ArrayList时,一个数组也被实例化,当向ArrayList中添加对象是,数组的大小也相应的改变。这样就带来以下有特点:
快速随即访问 你可以随即访问每个元素而不用考虑性能问题,通过调用get(i)方法来访问下标为i的数组元素。
向其中添加对象速度慢 当你创建数组是并不能确定其容量,所以当改变这个数组时就必须在内存中做很多事情。
操作其中对象的速度慢 当你要想数组中任意两个元素中间添加对象时,数组需要移动所有后面的对象。
LinkList:
LinkedList是通过节点直接彼此连接来实现的。每一个节点都包含前一个节点的引用,后一个节点的引用和节点存储的值。当一个新节点插入时,只需要修改其中保持先后关系的节点的引用即可,当删除记录时也一样。这样就带来以下有特点:
操作其中对象的速度快 只需要改变连接,新的节点可以在内存中的任何地方
不能随即访问 虽然存在get()方法,但是这个方法是通过遍历接点来定位的所以速度慢。
一些结论:
当一些被定义好的数据需要放到与数组对应的List中,ArrayList是很好的选择,因为它可以动态变化,但是不要在整个应用程序中频繁的使用。
你要很方便的操作其中的数据而不用随即访问时;LinkList是很好的选择。如果你要频繁随机访问建议使用ArrayList。
==================================================
java.util.ArrayList类实现了java.util.List接口,ArrayList使用使用数组结构实现List数据结构
如果经常从容器中作删除或插入对象的动作,则使用java.util.LinkedList会获得较好的效率
//StringStack.java
package singwin;
import java.util.*;
public class StringStack {
private LinkedList<String> linkedList;
public StringStack()
{
linkedList=new LinkedList<String>();
}
public void push(String name)
{
//add element into list's head
linkedList.addFirst(name);
}
public String top()
{//get the first element of this list
return linkedList.getFirst();
}
public String pop()
{
//remove the first element from this list
return linkedList.removeFirst();
}
public boolean isEmpty()
{
//is this list empty
return linkedList.isEmpty();
}
}
//StirngStackDemo.java
package singwin;
import java.util.Scanner;
public class StringStackDemo
{
public static void main(String [] args)
{
Scanner scanner=new Scanner(System.in);
StringStack stack=new StringStack();
System.out.println("input name ,and key in quit to the end");
while(true)
{
System.out.print("#");
String input=scanner.next();
if (input.equals("quit"))
break;
stack.push(input);
}
System.out.print("显示输入:");
while(!stack.isEmpty())
{
System.out.print(stack.pop()+" ");
}
System.out.println();
}
}
package singwin;
import java.util.*;
public class ListTest {
public static void main(String []args)
{
Scanner scanner=new Scanner(System.in);
//List<String> list=new ArrayList<String>();//当输入String型数据时
List<Integer> list=new ArrayList<Integer>();
System.out.println("please input name(key in -1 to the end)");
while(true)
{
System.out.print(":");
//String input=scanner.next();//当输入String型数据时
Integer input=scanner.nextInt();
if (input.equals(-1))
break;
list.add(input);
}
System.out.print("display your input:");
//使用Iterator及其iterator.hasNext()方法输出
Iterator iterator=list.iterator();//use iterator to get a element
while(iterator.hasNext())//is exist the next element
{
System.out.print(iterator.next()+"\t");
}
//也可使用增强的for()循环来输出
//for(Integer s:list)
// System.out.print(s+"\t");
/*还可使用for循环和list.size()方法输出
for(int i=0;i<list.size();i++)
System.out.print(list.get(i)+"\t");
*/
System.out.println("end.");
}
}
====================================================

被折叠的 条评论
为什么被折叠?



