java ordered list_Java数据结构--有序表

Predecessor interface

/**

* Created by root on 16-3-4.

*/

public interface Predecessor {

public ListNode getNext();

public void setNext(ListNode node);

}

ListNode

public class ListNode implements Predecessor {//链表节点

E item;//链表节点字段 用于存放二叉树的节点

ListNode next;

public ListNode(){

this.item=null;

next=null;

}

public ListNode(E item){ //有参构造

this.item=item; //设置字段

next=null;

}

public ListNode(E item,ListNode node){

this.item=item;

this.next=node;

}

public E getItem(){

return this.item;

} //获取字段

public void setItem(E item){

this.item=item;

} //重设字段

public void setNext(ListNode next){

this.next=next;

} //设置下一个节点

public ListNode getNext(){//获得下一个节点

return next;

}

}

OrderedList

import java.util.Comparator;

/**

* Created by root on 16-3-4.

*/

public class OrderedList implements Predecessor {//E 继承了class Comparable 附带了方法 compareTo

private ListNode front; //头指针

public ListNode getNext(){ //prev的get next方法 得到front

return front;

}

public void setNext(ListNode node){

this.front=node;

}//prev的 setNext方法 设置front的 next

public void add(E target){ //向有序表加入value

Predecessor prev =this; //虚拟一个front的前节点 prev

ListNode node =front; //指向头节点的node指针

while (node!=null){

int comparison =target.compareTo(node.getItem());//如果target> node.item comparison >0

if(comparison<0){ //向有序表insert一个节点

prev.setNext(new ListNode(target,node));return;//中断循环 在prev和node之间加入一个节点

}

else if(comparison==0)return;//重复则不操作 并终端循环

else{

prev=prev.getNext();

node=node.getNext();//两指算法 向后移动

}

}

prev.setNext(new ListNode(target));//如果有序表为空 或者加入的target是最大的值 加入新节点

}

public boolean contains(E target){

ListNode node =front;

while(node!=front){

int comparison =target.compareTo(node.getItem());

if(comparison<0) return false; //如果target小于有序表的最小值 则中断查询

else if(comparison==0)return true;//找到目标 返回ture

else {

node=node.getNext();

}

}

return false;

}

public boolean remove(E target){//和查找类似

Predecessor prev =this;

ListNode node =front;

while(node!=null){

int comparison=target.compareTo(node.getItem());

if(comparison<0)return false;//如果查找到比目标更大的值 中断操作

else if(comparison==0)prev.setNext(node.getNext());//链接

else{

prev=prev.getNext();

node=node.getNext();

}

}

return false;

}

}

测试类

/**

* Created by root on 16-3-4.

*/

public class Test {

public static void main(String[] args){

OrderedList orderedList =new OrderedList();

orderedList.add(1);

orderedList.add(7);

orderedList.add(4);

orderedList.add(5);

ListNode node =orderedList.getNext();

while(node!=null){

System.out.println(node.getItem());

node=node.getNext();

}

System.out.println(orderedList.contains(7));

orderedList.remove(7);

System.out.println(orderedList.contains(7));

}

}

结果

1

4

5

7

false

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java中,没有直接的ordered_map类。Java中有TreeMap类可以用来实现有序的映射,其底层是基于红黑树实现的。使用TreeMap可以实现有序的键值对存储,并且支持快速的插入、删除和查找操作。与之类似的是LinkedHashMap类,它也可以实现有序的映射,但是其底层是基于哈希和双向链实现的。 如果你需要在Java中使用有序的映射,可以考虑使用TreeMap或LinkedHashMap类。这两个类在插入和删除操作上稍微慢一些,但在查找操作上更加高效。在使用时,要根据具体的需求和性能要求进行选择。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [map和unordered_map区别](https://blog.csdn.net/boiled_water123/article/details/103759086)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [C++ unordered_map容器(STL unordered_map)](https://blog.csdn.net/qq_28584889/article/details/83833296)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值