集合框架List接口中ArrayList及LinkedList使用

Java 中的集合框架

在这里插入图片描述

List 接口

List接口中的元素的特点:
List中的元素有序,可以重复。两个常用的实现类ArrayList和LinkedList.

1.ArrayList
底层是数组形式存储,访问数度快,增删慢,线程不安全。 Vector是ArrayList的多线程的一个替代品。

2.LinkedList
类似链表结构,查询慢,增删快,线程不安全。
如图所示:
在这里插入图片描述

1.ArrayList的常用操作:

ArrayList类 的增删改查操作:

 import java.util.ArrayList;  
 public class Main {  
   
     public static void main(String[] args) {  
         //增加  
         ArrayList list= new ArrayList();  
         list.add(" 曹操");  
         list.add(" 刘备");  
         list.add(2, "张飞");  
         System.out.println(list);  
   
         ArrayList sublist = new ArrayList();  
         sublist.add(" 张三");  
         sublist.add("李四");  
         list.addAll(1, sublist);  
         System.out.println(list);  
   
         //删除指定元素  
         list.remove("张三");  
         System.out.println(list);  
   
         //根据索引删除  
         list.remove(2);  
         list.remove(2);  
         System.out.println(list);  
   
         //批量删除  
         list.removeAll(sublist);  
         System.out.println(list);  
   
         //修改  
         list.set(0, "王五");  
         System.out.println(list);  
   
         //查看  
         ArrayList li = new ArrayList();  
         li.add("小明");  
         li.add("小王");  
         li.add("小李");  
         li.add("小张");  
         list.addAll(li);  
         list.add("1小吕");  
   
         //根据索引查看  
         System.out.println(list.get(1));  
         System.out.println(list);  
   
         //显示第一次出现的位置  
         System.out.println(list.indexOf("1小吕"));  
   
         //显示最后一次出现的位置  
         System.out.println(list.lastIndexOf("小明"));  
   
         //查看指定元素最后一个不显示  
         System.out.println(list.subList(1, 3));  
   
     }  
 }  

2.LinkedList的常用操作:

public class Test{

    public static void main(String args[]) {
        // 创建类链接列表的对象
        LinkedList<String> object = new LinkedList<String>();
 
        // 将元素添加到链接列表
        object.add("A");
        object.add("B");
        object.addLast("C");
        object.addFirst("D");
        object.add(2, "E");
        object.add("F");
        object.add("G");
        System.out.println("Linked list : " + object);
 
        // 从链接列表中删除元素
        object.remove("B");
        object.remove(3);
        object.removeFirst();
        object.removeLast();
        System.out.println("Linked list after deletion: " + object);
 
        // 在链表中查找元素
        boolean status = object.contains("E");
 
        if(status)
            System.out.println("List contains the element 'E' ");
        else
            System.out.println("List doesn't contain the element 'E'");
 
        // 链表中的元素数
        int size = object.size();
        System.out.println("Size of linked list = " + size);
 
        // 从链接列表中获取和设置元素
        Object element = object.get(2);
        System.out.println("Element returned by get() : " + element);
        object.set(2, "Y");
        System.out.println("Linked list after change : " + object);
    }
}

LInkedList链表结构中 Node 及 递归的使用方法
具体如下:
引入Node类:

public class Node {
	    private Object data;
	
	    private Node node;
	
	    public Node() {
	    }
	
	    public Node(Object data, Node node) {
	        this.data = data;
	        this.node = node;
	    }
	
	    public Object getData() {
	        return data;
	    }
	
	    public void setData(Object data) {
	        this.data = data;
	    }
	
	    public Node getNode() {
	        return node;
	    }
	
	    public void setNode(Node node) {
	        this.node = node;
	    }
    }

//主程序 main方法

public class Text {
    public static void main(String[] args) {
        Node node = new Node("周瑜", null);
        node = new Node("张飞", node);
        node = new Node("关羽", node);
        node = new Node("刘备", node);
        node = new Node("曹操", node);
        node = new Node("刘表", node);
        String res = getKey("刘备1", node);
        System.out.println(res);
    }

    /**
     * @param key  要查找得key
     * @param node 查哪一个节点
     * @return
     */
    public static String getKey(String key, Node node) {

        if (node.getData().equals(key)) {
            return "找到了";
        }
        if (node.getNode() != null) {
            return getKey(key, node.getNode());
        } else {
            return "没有找到";
        }
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值