Java 年链接列表

Java 年链接列表,java,java-8,Java,Java 8,我必须用两个位置对LinkedList进行编码。第一个是名字,第二个是年份 class Person { String name; int year; public Person(String name, int year) { this.name = name; this.year = year; } } class LinkedListStart { public static void main (St

我必须用两个位置对LinkedList进行编码。第一个是名字,第二个是年份

class Person
{
    String name;
    int year;

    public Person(String name, int year) {
        this.name = name;
        this.year = year;
    }
}   



class LinkedListStart { 
    public static void main (String[] args) throws java.lang.Exception
    {
        LinkedList<Person> persons = new LinkedList<Person>();
            persons.add(new Person("Joe", 2010));
        persons.add(new Person("Jane", 2012));
        persons.add(new Person("Charly", 1910));
        persons.add(new Person("Daisy", 1908));

        System.out.println("LinkedList : " + persons);
    }
}    
班级人员
{
字符串名;
国际年;
公众人物(字符串名称,整数年){
this.name=名称;
今年=年;
}
}   
类LinkedListStart{
公共静态void main(字符串[]args)引发java.lang.Exception
{
LinkedList persons=新建LinkedList();
人员。添加(新人员(“Joe”,2010年));
新增(新人员(“Jane”,2012年));
添加(新的人(“Charly”,1910年));
添加(新人物(“黛西”,1908年));
System.out.println(“LinkedList:+个人”);
}
}    
运行代码时出现错误: 链接列表:[Person@6d06d69c, Person@7852e922, Person@4e25154f, Person@70dea4e]

有可能吗?我想使用每个循环来查找1950岁以下的人。
如何编写这样的代码

你应该定义一个班级人员,如下所示:

class Person{
        String name;
        int year;
        public Person(String name, int year) {
            this.name = name;
            this.year = year;
        }
}
LinkedList<Person> persons = new LinkedList<>();
然后创建一个
LinkedList
,如下所示:

class Person{
        String name;
        int year;
        public Person(String name, int year) {
            this.name = name;
            this.year = year;
        }
}
LinkedList<Person> persons = new LinkedList<>();
LinkedList persons=新建LinkedList();

您可以将它们组合成一个
字符串,如
名称。添加(“Joe 2010”)
不是推荐的,或特别好的方法)或创建一个
Person
类来包含这两个属性,但不能在一个空间中添加两个元素,就像您试图使用上面的代码一样

如果使用
Person
类路径,则迭代每个元素,并检查
Person.year
或任何您选择调用该属性的值是否小于1950

如果您使用
字符串
路径,对每个字符串进行迭代,将
字符串
拆分到一个空格中以创建一个数组,其中第一个元素是名称,第二个元素是年份,使用
Integer.parseInt
解析一个
int
字符串,然后检查年份是否小于1950。正如@Michael所提到的,不建议将这样的两个字符串组合在一起


Edit:对于您的新问题,Java的
LinkedList
类被称为泛型类,因为它接受一个类型参数,例如
LinkedList
中的
Person
部分。由于您的类未定义为泛型类,并且与内置的
LinkedList
具有相同的名称,因此当您尝试传入类型参数时,会收到此错误,因为Java认为您正在尝试使用自己的
LinkedList
类。通常,即使在代码中没有使用特定的内置类,最好不要使用与内置类相同的名称命名自己的类,这样就不会发生类似的冲突。只需重命名您自己的类,您的代码就可以工作了

是的,您可以创建一个自定义列表。这是代码, 创建一个类名,我给它命名为HomeDataModel

public class HomeDataModel {

private String name;
private int year;


public HomeDataModel() {
}

public HomeDataModel(String name,int year) {

    name=name;
    year= year;

}

public String getName() {
    return name;
}

public void setName(String name) {
    name= name;
}

public String getYear() {
    return year;
}

public void setYear(int year) {
    year= year;
}
}
现在在要使用列表的活动中

//creating a custom list
List<HomeDataModel> listname = new ArrayList<>();
list.add(new HomeDataModel("yourname", "Youryear"));
//code for check how is below 1950 
for(int i=0; i<listname.size(); i++){
int check = list.get(i).getYear();
if(check <1950){
String newname = list.get(i).getName(); //the name is stored
Toast.makeText(MapsActivity.this,newname, Toast.LENGTH_SHORT).show();
}
}
//创建自定义列表
List listname=new ArrayList();
添加(新的HomeDataModel(“您的姓名”、“您的年份”);
//检查代码如何低于1950
对于(int i=0;i
运行代码时出现错误:LinkedList:[Person@6d06d69c, Person@7852e922, Person@4e25154f, Person@70dea4e]

默认情况下,Java中的每个类都有toString()方法,如果将该类的某个对象传递给System.out.println(),则会调用该方法。默认情况下,此调用返回className@hashcode那个物体的形状。 这里您没有覆盖toString方法,这就是为什么默认情况下它会这样打印。请告诉我们以下代码:

public class Test {

static class Person
{
    String name;
    int year;

    public Person(String name, int year) {
        this.name = name;
        this.year = year;
    }



    @Override
    public String toString() {
        return "Person [name=" + name + ", year=" + year + "]";
    }


} 


        public static void main (String[] args) throws java.lang.Exception
        {
            LinkedList<Person> persons = new LinkedList<Person>();
            persons.add(new Person("Joe", 2010));
            persons.add(new Person("Jane", 2012));
            persons.add(new Person("Charly", 1910));
            persons.add(new Person("Daisy", 1908));

            for (Person person : persons) {
                System.out.println("Name is::"+person.name+" year is:::"+person.year);
            }

            //for printing the person override tostring method
            System.out.println(persons);
}
公共类测试{
静态类人
{
字符串名;
国际年;
公众人物(字符串名称,整数年){
this.name=名称;
今年=年;
}
@凌驾
公共字符串toString(){
返回“Person[name=“+name+”,year=“+year+”];
}
} 
公共静态void main(字符串[]args)引发java.lang.Exception
{
LinkedList persons=新建LinkedList();
人员。添加(新人员(“Joe”,2010年));
新增(新人员(“Jane”,2012年));
添加(新的人(“Charly”,1910年));
添加(新人物(“黛西”,1908年));
用于(人:人){
System.out.println(“名称为::”+个人名称+“年份为:::”+个人年份);
}
//用于打印person override tostring方法
系统输出打印(人);
}

}

我们希望您自己至少尝试过解决问题,并展示了您的尝试。您不能添加到这样的列表中。您可以使用地图或包含两个字段的对象列表。如果赋值是这样的,您很可能会以一致的模式添加这些元素,例如names指数为偶数,Year指数为奇数。只有两个
添加
调用,而不是一个有两个参数的调用。当您打算在该类中使用标准
链接列表时,不要调用您自己的类
链接列表
。除非您应该实现自己的链接列表。在这种情况下,您只能使用您拥有的功能lso implemented.doing
System.out.println(new Person(“name”,2000));
将返回类似的输出-请将
toString()
方法重写(添加)到
Person
类中(例如
@override public String toString(){return name+“”+year;}
)@user85421禁止如何将其添加到我的代码中?串接字符串是一个坏主意。如果我的名字是André3000呢?@Michael同意,我应该在你在文章中提到它之前明确且明显地提到这不是一个好方法comments@tellarwind你移动了一些球门柱。你应该在第一个p中包括这一点建议删除该问题,再问另一个问题。实际上,你已经使现有问题无效answers@tellarwind霍尔格