Java集合框架篇-47-LinkedList的特有功能练习

     目前,我们学习了ArrayList的基本操作和相关方法的练习,这篇,来学习LinkedList,主要是学习LinkedList的相对于ArrayList来说,特有的方法。我们知道,ArrayList底层是基于数组实现,而LinkedList底层是基于链表实现。本篇学习链表的一些特有方法,基本上都和头结点和尾节点操作有关。

 

1.addFirst()和addLast()

       在集合中,按照命名规范,add开头都表示新增元素,addFirst()和addLast()表示在链表的开头和结尾插入元素,下面写一个测试类代码来实现。

 

package list;

import java.util.LinkedList;

public class Demo6_List {

   @SuppressWarnings({"rawtypes", "unchecked" })
   public static void main(String[] args) {

      LinkedListlist = newLinkedList();

      //当前list是空集合,执行addFirst看看有什么效果

      list.addFirst("a");

      list.addFirst("b");

      list.addFirst("c");

      System.out.println(list);

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

      //当前集合是[c, b, a],下面执行addLast方法

      list.addLast("x");

      list.addLast("y");

      list.addLast("z");

        System.out.println(list);

   }

}

运行输出:

[c, b, a]
---------------
[c, b, a, x, y, z]

2.getFist()和getLast()

然后,看看查询首尾节点元素的方法。

package list;

import java.util.LinkedList;

public class Demo6_List {

   @SuppressWarnings({"rawtypes", "unchecked" })

   public static void main(String[] args) {

      LinkedListlist= newLinkedList();

      list.add("a");

      list.add("b");

      list.add("c");

      list.add("d");

      list.add("e");

      list.add("f");

      //查询头结点元素

      Objectobj= list.getFirst();

      System.out.println(obj);

      //查询尾节点元素

      Objectobj1= list.getLast();

      System.out.println(obj1);

   }

}

输出:

a
f

3.removeFirst() 和removeLast()

连接了新增和查找之后,再看看删除首尾节点元素的方法。

package list;

import java.util.LinkedList;

public class Demo6_List {

   @SuppressWarnings({"rawtypes", "unchecked" })
   public static void main(String[] args) {

      LinkedListlist = newLinkedList();

      list.add("a");

      list.add("b");

      list.add("c");

      list.add("d");

      list.add("e");

      list.add("f");
      //删除头结点元素
      list.removeFirst();
      //删除尾节点元素
      list.removeLast();
      System.out.println(list);

   }

}
输出:[b, c, d, e]

 

4.get(int index)

根据索引查询节点元素的方法。这个在ArrayList和LinkedList都有这个方法,在根据索引查找元素的时候使用。

 

package list;

import java.util.LinkedList;

public class Demo6_List {

	@SuppressWarnings({ "rawtypes", "unchecked" })
	public static void main(String[] args) {
		LinkedList list = new LinkedList();
		list.add("a");
		list.add("b");
		list.add("c");
		list.add("d");
		list.add("e");
		list.add("f");
		
		//返回指定索引的元素
		Object obj = list.get(2);
		System.out.println(obj);
		//Object obj1 = list.get(6);  //索引越界异常
		//System.out.println(obj1);
	}

}

输出:C

这里了解下LinkedList中根据索引查找方法底层代码是如何实现。

Node<E> node(int index) {
        // assert isElementIndex(index);

        if (index < (size >> 1)) {
            Node<E> x = first;
            for (int i = 0; i < index; i++)
                x = x.next;
            return x;
        } else {
            Node<E> x = last;
            for (int i = size - 1; i > index; i--)
                x = x.prev;
            return x;
        }
      上面的代码,第一个分支判断是,如果索引小于集合size除以2,说明要查找元素在前一半,那么就执行第一个链表的节点开始循环一次去查找,就是从头一直查找对比,直到找到index上的元素。第二个分支是,index在集合后半部分,那么就从尾部节点往前开始循环查找

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值