在工作中少不了使用集合類來處理資料,list是最常用的一種集合了。這些集合類使用都非常的方便,但是使用集合存放一些自定義的物件時,就需要注意使用這些方法了。
這裡主要講一下list之間的差集該怎麼取。
原生api
如果集合中存放的是基本資料型別或字串型別,list提供了交集、差集、並集的這些方法。使用如下:
需求呼叫方法
說明交集
lista.retainall(listb)
呼叫方法後lista變為兩個集合的交集,listb不變
差集lista.removeall(listb)
呼叫方法後lista變為兩個集合的差集,listb不變
並集1.lista.removeall(listb) 2.lista.addall(listb)
去重,先取差集再並集。lista變為兩個集合的並集,listb不變
使用場景:list泛型指定為基本資料型別或字串。
list
list =
newarraylist
<
>()
;
自定義物件list差集
假設有student類和student物件集合lista、listb。通過物件的id判斷為相等,對兩個集合求差集。
public
class
student
思路:遍歷lista,判斷當前student物件,如果存在於listb中就從lista中取出,最後返回lista對listb的差集。
1.遍歷lista:
遍歷的方法有for迴圈、增強for迴圈和迭代器,使用迭代器遍歷lista並刪除元素避免出錯。
2.判斷當前物件是否存在於listb中,使用hashset來協助操作。首先遍歷listb,將物件id放入hashset中,然後使用迭代器遍歷lista,判斷當前物件id是否存在於hashset中即是否存在listb。
方法**:
/**
* 差集:刪除左邊集合中在右邊集合存在的元素並返回
* @param left
* @param right
* @return
*/private
static list
removeall
(list
left, list
right)
if(right == null)
//使用linkedlist方便插入和刪除
list
res =
newlinkedlist
<
>
(left)
; set
set =
newhashset
<
>()
;//將student id存放到set
for(student item : right)
//迭代器遍歷lista
iterator
iter = res.
iterator()
;while
(iter.
hasnext()
)}return res;
}
呼叫實現 lista = removeall(lista, listb);
交集和並集的操作類似:
交集:如果set中包含id則新增到交集listc,listc.add(student)。
並集:如果set中包含id則continue,否則新增到lista,iterator不提供add方法,使用listiterator.add(student)見下面介紹。
注意的一點是: remove是使用迭代器的remove方法,而不是使用list的remove方法
listiterator
如果你想在遍歷的時候進行修改或新增操作而不是刪除,請使用listiterator。
listiterator的使用和iterator幾乎一樣,不同的是listiterator提供了更多的方法對list進行操作,包括新增元素add和修改set.
listiterator
iter = res.
listiterator()
;while
(iter.
hasnext()
)if(set.
contains
(item.
getid()
))//3.修改 set
if(set.
contains
(item.
getid()
))}
原生方法:list的交集,差集,並集
自定義物件集合求差集:兩個list求差集
listiterator的更多使用:listiterator,可以邊遍歷邊修改
自定義List物件集合排序
1.定義實體類 public class commodity public commodity string type,string name,double price,string shopname,int sales 此處省略類屬性的get set方法 public string tostrin...
對自定義物件集合List中的資料進行排序
android很多很多頁面都有用到listview,很多時候,我們想顯示給使用者看的資料是已經排序好的。所以,在listview繫結介面卡adapter之前,我們需要對資料進行排序。給大家介紹乙個很簡單的方法。可以對根據乙個自定義物件的屬性對使用者自定義物件的集合進行排序。對listview資料進行...
HashSet集合儲存自定義物件細節
在說hashset集合怎麼儲存自定義物件細節之前,先看看hashset類的特點吧。通過查閱api,發現hashset集合 1 hashset集合底層使用雜湊表結構 2 hashset集合中的儲存的元素是無序的 3 因為繼承了set介面,所以不能儲存重複元素 4 允許儲存null元素,但是只能有乙個 ...