List接口问题和java里TreeSet的add问题

问题1:List接口下的ArrayList和linkedList这两个实现类都可以使用get方法,但是Set接口是不能使用get方法的?
详细:
public static void main(String[] args) {
NewTitle car=new NewTitle(1,"汽车","管理员");//创建新闻标题对象,NewTitle为新闻标题类
NewTitle test=new NewTitle(2,"高考","管理员");//创建新闻标题对象,NewTitle为新闻标题类
        List newsTitleList=new ArrayList();//创建存储新闻标题的集合对象,这里用List父类指向其子类ArrayList也是一种多态的形式
//List<NewTitle> newsTitleList=new ArrayList<NewTitle>();
newsTitleList.add(car);//将具体的对象放进集合中
newsTitleList.add(test);//将具体的对象放进集合中
System.out.println("新闻标题的名称为:");
//使用普通for循环
for (int i = 0; i < newsTitleList.size(); i++) {
 NewTitle name=(NewTitle) newsTitleList.get(i);//这里的get是需要下标值来使用的,而set没有下标值所以没有此方法
System.out.print(name.getName());
}
//使用增强for遍历输出
//for (Object object : newsTitleList) {//此增强第一个为该集合数据类型,也就是创建对象的类型,第二个为变量名,最后一个为集合名
//NewTitle title=(NewTitle) object;//这里强转的类型为类类型,为什么要进行强制转换?因为下面我们要使用类中的属性或者方法,只能转换成该类类型
//System.out.println(title.getName());//这里采用什么方式调用name的属性要看类中怎么定义,如果类属性为公有,就可以直接点name
//} 
//新闻标题的数目为
System.out.println("新闻标题的数目为:"+newsTitleList.size());


}


}
class NewTitle{
private int a;
private String name;
privateString zhize;


public NewTitle(int a, String name, String zhize) {
super();
this.a = a;
this.name = name;
this.zhize = zhize;
}


public int getA() {
return a;
}


public void setA(int a) {
this.a = a;
}


public String getName() {
return name;
}


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


public String getZhize() {
return zhize;
}


public void setZhize(String zhize) {
this.zhize = zhize;
}
}




好的,下面问题来了:
//使用普通for循环
for (int i = 0; i < newsTitleList.size(); i++) {
 NewTitle name=(NewTitle) newsTitleList.get(i);
System.out.print(name.getName());
}
这是使用数组for循环输出的,使用的是ArrayList实现类
谁能告诉我get(i)的作用是什么,还有为什么我放进集合的明明是对象,它get(i)得到的是一个对象,为什么只输出新闻标题汽车和高考,怎么不是对象中全部的属性


回答:
get(i);获取第i个对象
只输出新闻标题是因为代码只有
System.out.println(name.getName());
如果要想输出全部,这样:
System.out.println(name.getA());
System.out.println(name.getName());
System.out.println(name.getZhize());
这个道理跟你命令一个人:告诉我你身高!
然后你惊讶:为什么你明明站在我面前,只告诉我身高呢?为什么不把体重、三维、年龄、、、全部说出来呢?


问题2:java里TreeSet的add怎么回事。。。我怎么添加不上?
详细:这是我的代码,用TreeSet添加第一个可以但是第二个就出错。。求大神解答坐等。。
import java.util.*;


class TestPerson{
public static void main(String[] args) 
{
Set<Person> aa=new TreeSet<Person>();
aa.add(new Person("张三"));
aa.add(new Person("李四"));
Iterator it=aa.iterator(); 
while(it.hasNext())
{
System.out.print(it.next());
}
}
}
class Person{
String name;
Person(String name)
{
this.name=name;
}
public String toString(){
return name;
}
}




回答:
Person如果不实现Comparable,add时会出错;
添加第一个对象时,TreeSet里没有任何元素,所以没有问题;  
当添加第二个对象时,TreeSet就会调用该对象的compareTo(Object obj)方法与集合中其他元素进行比较;
如果对应的类没有实现Comparable接口,则会引发ClassCastException异常;
简单添加一段,让你代码可以运行,不过,你实际使用中,要根据自己的需求来修改;
在Person中添加:
@Override
public int compareTo(Person stu) {
return  this.name.compareTo(stu.name);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值