list学习

部署运行你感兴趣的模型镜像
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.");

}
}
====================================================

您可能感兴趣的与本文相关的镜像

PyTorch 2.6

PyTorch 2.6

PyTorch
Cuda

PyTorch 是一个开源的 Python 机器学习库,基于 Torch 库,底层由 C++ 实现,应用于人工智能领域,如计算机视觉和自然语言处理

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值