import java.util.Arrays; public class ListOfMy{ private Object[] obj; private int num=0; public ListOfMy(){ obj=new Object[0]; } public int size(){ return num; } public boolean isEmpty() { if(obj==null || obj.length<1){ return true; } return false; } public boolean contains(Object element) { for(int i=0; i<obj.length; i++){ if(obj[i].equals(element)){ return true; } } return false; } public boolean add(Object element) { if(element!=null){ num++; obj=Arrays.copyOf(obj, num); obj[num-1]=element; return true; } return false; } public boolean remove(Object element){ boolean f=false; for(int i=0,j=0; i<obj.length; i++){ if(!obj[i].equals(element)){ obj[j++]=obj[i]; f=true; } } if(f){ obj=Arrays.copyOf(obj, --num); } return f; } public void clear() { obj=new Object[0]; num=0; } public Object get(int index)throws Exception{ if(indexnum){ throw new Exception("index无效"); } return obj[index]; } public int set(int index, Object element)throws Exception{ if(indexnum){ throw new Exception("index无效"); } obj[index]=element; return index; } public void insert(int index, Object element)throws Exception{ if(indexnum){ throw new Exception("index无效"); } num++; obj=Arrays.copyOf(obj, num); for(int i=0; iindex; i--){ obj[i]=obj[i-1]; } obj[index]=element; } public Object remove(int index)throws Exception{ if(indexnum){ throw new Exception("index无效"); } Object ob=null; for(int i=0, j=0;i<num;i++){ if(i!=index){ obj[j]=obj[i]; j++; }else{ ob=obj[i]; } } if(null!=ob){ obj=Arrays.copyOf(obj, --num); } return ob; } public int indexOf(Object element) { for(int i=0; i<obj.length; i++){ if(obj[i].equals(element)){ return i; } } return -1; } public String toString(){ StringBuilder sb=new StringBuilder("["); for(int i=0; i0)sb.append(","); sb.append(obj[i]); } sb.append("]"); return sb.toString(); } } 基本的,请参数,有不对的地方,请自己调试、修改。
可以通过继承ArrayList,然后在派生类重写toString方法,例如:
import static java.lang.System.out;
public class Program {
public static void main(String[] args) throws Exception {
MyArrayList<String> myArrayList=new MyArrayList<String>(){{
add("test1");
add("test2");
}};
for(String item:myArrayList){
out.println(item);
}
out.println(myArrayList);// print This override toString method.
}
}
class MyArrayList<E> extends ArrayList<E>{
@Override
public String toString() {
return "This override toString method.";
//return super.toString();
}
}
使用set集合啊,set集合是不能放重复的数据的。
Set hashSet = new HashSet(list);然后在转过来就行了,set去除重复是调用了equals方法,所以你在Sh里面要重写equals方法,自定义比较的规则,例如:public boolean equals(Object obj) { if(obj==null) return false; if(obj==this) return true; Sh sh = (Sh)obj; if(sh.getHm()==this.getHm()){ return true; } return false; }。
简单介绍Object中的equals()方法和HashCode()方法:java中的String,Integer这些类已经实现了equals和HashCode方法的重写,但是Object类中并没有重写
equals():
equals()方法,在这些类中equals()方法的实现是:
public boolean equals(Object obj){
return(this == obj);
}
HashCode()方法
比较的是两个对象的内存地址,在Object中的定义是:public native int hashCode();
说明他只是一个本地方法,要了解HashCode就要了解java中集合,一般来说分为两类,一类是List,一类是Set。前者元素有序可以重复,后者无需不能重复。在Set中有HashMap,HashSet这些方法就是保证元素的不重复性。
两者关系:
要判断两个对象是否相等,就要重写equals()方法,具体的实现网上很多。重写equals()方法一般都要重写HashCode()方法,这是为了提高存储效率,上面说的HashCode可以保证相同的元素存储于相同的地址,理论上可以没有,但是如果没有,使用效率会大大降低。比如说String实现HashCode之后,相同的对象对应的地址相同,然后在进行equals比较,里面对象都存储在堆中的String Pool里面。
希望对你有所帮助
例如
class A
{
public void overWrite()
{
System.out.print("A")
}
}
public class B extends A
{
public void overWrite()
{
System.out.print("B")
}
public static void main(String[] args)
{
A a=new B();
a.overWrite();
}
}
输出B,这就是重写,主要发生在之类重写父类的方法和属性.
可能你是刚学习这门语言吧?其实很简单就可以知道答案了啊.设个断点,然后一步步F5(eclipse环境下)不就知道答案了吗?
当然我得承认我一开始想当然地认为在所有的集合类的总父接口里统一override了toString()方法.断点一看才知道不是这么回事,
事实上,是在这个类里实现的:
public abstract class AbstractCollection<E> implements Collection<E>
在其中有一个toString()的重写
public String toString() {
Iterator<E> i = iterator();
if (! i.hasNext())
return "[]";
StringBuilder sb = new StringBuilder();
sb.append('[');
for (;;) {
E e = i.next();
sb.append(e == this ? "(this Collection)" : e);
if (! i.hasNext())
return sb.append(']').toString();
sb.append(", ");
}
}
建议你自己随便新建一个list或者map什么的,用断点的方法去看看程序到底怎么走的.
声明:本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
蜀ICP备2020033479号-4 Copyright © 2016 学习鸟. 页面生成时间:2.570秒