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方法,自定義比較的規(guī)則,例如: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,這就是重寫,主要發(fā)生在之類重寫父類的方法和屬性.
可能你是剛學習這門語言吧?其實很簡單就可以知道答案了啊.設個斷點,然后一步步F5(eclipse環(huán)境下)不就知道答案了嗎?
當然我得承認我一開始想當然地認為在所有的集合類的總父接口里統(tǒng)一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秒