list接口的likedlist容器类找不到方法

帅气好男人_Jack 2014-06-24 11:40:34
我用list接口构造了linkedlist的容器类,构造一个链表,调用linkedlist的getFirst()和 remove()方法,变异竟然提示找不到该方法,我仔细查找了java技术文档,上面明明有啊,但是变异还是说找不到该方法。是不是我的jdk版本过时了,我的jdk是1.6版本的,下面是代码和调试结果:
import java.util.*;

public class TestLinkedList
{
public static void main(String[] args)
{
List L = new LinkedList();
for(int i=0; i < 9 ;i++)
L.add("周"+i);
System.out.println(L);
System.out.println(L.getFirst()); //获取list头元素
System.out.println(L.indexOf("周1"));
L.add(7,"周100");
L.removeLast(); //删除最后一个元素
System.out.println(L);
Collections. shuffle(L);
System.out.println(L);
Collections.sort(L);
System.out.println(L);
System.out.println(Collections.binarySearch(L,"周100"));
}
}

...全文
251 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
引用 9 楼 shine333 的回复:
你现在还没到运行时,现在是语法错误。 List接口没有提供first, last系列方法。所以,你声明的类型(也就是等号左边的类型)不能是List,而只能是LinkedList 反过来,你提到的运行时: 假设:
public class MyLinkedList extends LinkedList {
   public Object removeLast() {
      System.out.println("不可以删除最后一个!!!");
      return null;
   }
}
这个时候,随便你声明具体的类,还是LinkedList

LinkedList list = new MyLinkedList();
list.add("1234");
list.add("5678");
list.removeLast();
编译都能通过,且在运行时,会执行你所谓的“动态绑定”。 再把我的例子复述一遍: 今天(编译期,对应javac命令执行的时间),当我(代码)对你(编译器对应javac命令)说:“明天,有个人(List)要来”,你(编译器)只知道他是个人(List)——插一句,编译器还没智能到能够分析代码,这个即没必要,也不可靠,所以,即使就在等号后面马上出现了真实类型。 如果这个时候(还是编译期),我(代码)对你(编译器)说:“你带这个人(List)去男厕所(执行removeLast方法)”,你(编译器)会傻傻地拒绝(编译错误),说:“我不知道他是不是个男人(LinkedList),不能让这个人(List)去做只有男人(LinkedList)才能做的事情”。 这个时候(编译期),我(代码)只能改口(改掉你错误代码)说:“明天,有个男人(声明类型,也就是等号左边那个类型)要来,你带他去男厕所(执行removeLast)”。这个时候,你(编译器)会很高兴的确认我给你的任务(编译通过) 到了第二天(运行期,对应java命令执行的时间),那个人来了,检查无误,果然是个男人,而且还是个帅哥(男人的子类,好比上面MyLinkedList)。反正不管是帅哥也好,糟老头(其他LinkedList子类)也罢,反正一定是个男人,一定能去男厕所(执行在在LinkedList中定义过的removeLast方法)。
了解!我吧动态绑定搞错啦,动态绑定只针对重写的方法
shine333 2014-06-24
  • 打赏
  • 举报
回复
你现在的声明类型是List而不是LinkedList,即使它真实的类型是LinkedList,你仍然没法用LInkedList里面才有的方法。 好比,我现在说:“明天会有个人过来”,即使来的人确实是个“男的Java程序员”,你在仅仅知道“人”的情况下,没法做出以下任何一个结论: 他可以去男厕所 可以让他写Java程序 ... 只有在我明确告诉你“明天会有个男的Java程序员过来”,你才能得出上述的结论。 同样,你也只有明确告诉编译器,你的对象的类型是LinkedList,编译器才能让你用LinkedList的方法。如果你仅仅告诉编译器,它是个List(哪怕实际类型确实是LinkedList),编译器也不会让你用仅在LinkedList里面定义的方法
secret32 2014-06-24
  • 打赏
  • 举报
回复
getFirst removeLast是Linkedlist的方法 而不是List的方法 所以会找不到
ps 都用上Linkedlist了 就用个IDE吧 别用记事本了
shine333 2014-06-24
  • 打赏
  • 举报
回复
然后,漏了楼主的“动态绑定”,也就是多态: 进了男厕所,不同的男人(不同子类)有不同的表现,有的唱歌,有的有前列腺,因而慢腾腾,还有小孩子的直接拉在了裤子上(抛exception)。具体怎么样的表现,现在(编译期)你没法知道,只有到明天,进了男厕所(运行期)才知道
shine333 2014-06-24
  • 打赏
  • 举报
回复
你现在还没到运行时,现在是语法错误。 List接口没有提供first, last系列方法。所以,你声明的类型(也就是等号左边的类型)不能是List,而只能是LinkedList 反过来,你提到的运行时: 假设:
public class MyLinkedList extends LinkedList {
   public Object removeLast() {
      System.out.println("不可以删除最后一个!!!");
      return null;
   }
}
这个时候,随便你声明具体的类,还是LinkedList

LinkedList list = new MyLinkedList();
list.add("1234");
list.add("5678");
list.removeLast();
编译都能通过,且在运行时,会执行你所谓的“动态绑定”。 再把我的例子复述一遍: 今天(编译期,对应javac命令执行的时间),当我(代码)对你(编译器对应javac命令)说:“明天,有个人(List)要来”,你(编译器)只知道他是个人(List)——插一句,编译器还没智能到能够分析代码,这个即没必要,也不可靠,所以,即使就在等号后面马上出现了真实类型。 如果这个时候(还是编译期),我(代码)对你(编译器)说:“你带这个人(List)去男厕所(执行removeLast方法)”,你(编译器)会傻傻地拒绝(编译错误),说:“我不知道他是不是个男人(LinkedList),不能让这个人(List)去做只有男人(LinkedList)才能做的事情”。 这个时候(编译期),我(代码)只能改口(改掉你错误代码)说:“明天,有个男人(声明类型,也就是等号左边那个类型)要来,你带他去男厕所(执行removeLast)”。这个时候,你(编译器)会很高兴的确认我给你的任务(编译通过) 到了第二天(运行期,对应java命令执行的时间),那个人来了,检查无误,果然是个男人,而且还是个帅哥(男人的子类,好比上面MyLinkedList)。反正不管是帅哥也好,糟老头(其他LinkedList子类)也罢,反正一定是个男人,一定能去男厕所(执行在在LinkedList中定义过的removeLast方法)。
  • 打赏
  • 举报
回复
引用 2 楼 shine333 的回复:
你现在的声明类型是List而不是LinkedList,即使它真实的类型是LinkedList,你仍然没法用LInkedList里面才有的方法。 好比,我现在说:“明天会有个人过来”,即使来的人确实是个“男的Java程序员”,你在仅仅知道“人”的情况下,没法做出以下任何一个结论: 他可以去男厕所 可以让他写Java程序 ... 只有在我明确告诉你“明天会有个男的Java程序员过来”,你才能得出上述的结论。 同样,你也只有明确告诉编译器,你的对象的类型是LinkedList,编译器才能让你用LinkedList的方法。如果你仅仅告诉编译器,它是个List(哪怕实际类型确实是LinkedList),编译器也不会让你用仅在LinkedList里面定义的方法
Java的接口不是支持动态绑定的吗?父类引用指向子类,运行时更具实际的对象调用对象自己的方法
shine333 2014-06-24
  • 打赏
  • 举报
回复
引用 5 楼 jackzhouyu 的回复:
[quote=引用 1 楼 secret32 的回复:] getFirst removeLast是Linkedlist的方法 而不是List的方法 所以会找不到 ps 都用上Linkedlist了 就用个IDE吧 别用记事本了
Java的接口不是支持动态绑定吗?LinkedList集成List吗?[/quote] 你还是没看懂我举的例子。
  • 打赏
  • 举报
回复
引用 楼主 jackzhouyu 的回复:
我用list接口构造了linkedlist的容器类,构造一个链表,调用linkedlist的getFirst()和 remove()方法,变异竟然提示找不到该方法,我仔细查找了java技术文档,上面明明有啊,但是变异还是说找不到该方法。是不是我的jdk版本过时了,我的jdk是1.6版本的,下面是代码和调试结果:
import java.util.*;

public class TestLinkedList
{
	public static void main(String[] args)
	{
		List L = new LinkedList();
		for(int i=0; i < 9 ;i++)
			L.add("周"+i);
		System.out.println(L);		
		System.out.println(L.getFirst());		//获取list头元素
		System.out.println(L.indexOf("周1"));
		L.add(7,"周100");
		L.removeLast();				//删除最后一个元素
		System.out.println(L);
		Collections. shuffle(L);
		System.out.println(L);
		Collections.sort(L);
		System.out.println(L);
		System.out.println(Collections.binarySearch(L,"周100"));
	}
}
Java的动态绑定不就是这个么,难道不行
  • 打赏
  • 举报
回复
引用 1 楼 secret32 的回复:
getFirst removeLast是Linkedlist的方法 而不是List的方法 所以会找不到 ps 都用上Linkedlist了 就用个IDE吧 别用记事本了
Java的接口不是支持动态绑定吗?LinkedList集成List吗?
逍遥jc 2014-06-24
  • 打赏
  • 举报
回复
如果没有其它方面的约束的话。直接改为LinkedList L = new LinkedList();就好了。
Eternal_M 2014-06-24
  • 打赏
  • 举报
回复
List L = new LinkedList(); 改为 LinkedList L = new LinkedList();
内容概要:本文围绕超导磁能储存系统(SMES)的建模与仿真展开,基于Simulink平台构建系统级动态仿真模型,涵盖超导线圈、功率转换系统(PCS)以及核心控制策略等关键模块。研究重点在于分析SMES在电网中实现快速能量存储与释放的能力,验证其在提升电力系统稳定性、抑制功率波动方面的有效性,尤其针对新能源发电带来的间歇性与波动性问题提供了有效的解决方案。通过仿真手段深入探讨系统的动态响应特性,为优化控制算法的设计与应用提供可靠的技术支撑。; 适合人群:适用于具备电力系统、自动控制理论或能源存储技术背景,熟悉Simulink仿真环境的科研人员、工程技术人员及研究生;同时适合有志于开展新型储能技术仿真研究的高年级本科生参考学习。; 使用场景及目标:①深入理解超导磁能储存系统的基本结构、工作原理及其在电力系统中的应用场景;②掌握在Simulink中搭建复杂电力电子与控制系统联合仿真模型的方法;③研究SMES在电网调频、电压支撑、瞬时功率补偿等典型工况下的动态性能表现;④为后续先进控制策略(如PID、模糊控制、现代控制理论等)的优化设计与验证提供仿真试验平台。; 阅读建议:建议读者结合文中模型逐步动手搭建仿真系统,重点关注各功能模块的参数设置与信号接口匹配,配合具体案例进行仿真调试,深入理解控制逻辑与系统动态行为之间的内在联系,并可进一步拓展至与其他储能形式(如锂电池、飞轮储能)的性能对比研究,以深化对不同型储能技术特点的认知。
内容概要:本文围绕“考虑火-储联合调频(火电机组-混合储能)的协同控制策略”展开研究,提出一种基于Matlab仿真的协同控制方法,旨在提升电力系统频率调节的快速性与稳定性。通过构建火电机组与混合储能(如蓄电池、飞轮等)的联合调频模型,设计合理的功率分配机制与控制策略,充分发挥火电的持续调节能力与储能的快速响应优势,有效应对电网负荷波动与频率偏差。文中结合改进信号分解算法(如ICEEMDAN)与优化算法(如GWO),实现对调频信号的精准分频与储能单元的优化调度,提高系统整体调频效率与经济性。; 适合人群:具备一定电力系统基础知识和Matlab编程能力,从事新能源并网、电力系统稳定控制、储能技术应用等相关领域的研究生、科研人员及工程技术人员。; 使用场景及目标:①用于研究火电机组与混合储能在电网一次调频、二次调频中的协同作用机制;②为实际电力系统中储能配置与调频控制策略设计提供仿真验证平台与理论支持;③支撑相关课题研究、学术论文撰写及工程项目前期论证。; 阅读建议:建议结合Matlab代码深入理解控制算法实现细节,重点关注功率分配逻辑、信号分解过程与优化算法参数设置,并可通过修改系统参数进行对比仿真,以加深对协同控制效果的认识。

62,622

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧