如果您可以對對象強加一個排序,那麼您只需要檢查其中的排序對a < b
。可能是任何東西:數組中的索引,指針(對於允許指針值訪問的語言,yay)。
for(Object a : list) {
for(Object b : list) {
if (a.compare(b) < 0) {
很簡單,實際上會解決問題。
如果你有整數索引存儲,你可以做
for(int i = 0; i < list.length; i++) {
for(int j = i + 1; j < list.length; j++) {
,你不會得到重複。這將適用於ArrayList
,但可能不適用於任意類型。你也許可以克隆一些迭代器,但我不會對賭...
for(Iterator<Object> iter = list.iterator(); iter.hasNext();) {
Object a = iter.next();
Iterator<Object> iter2 = iter.clone();
for(;iter2.hasNext();) {
Object b = iter.next();
但嚴重的是,這是一個黑客。如果它適用於所有的java集合,我會感到驚訝。一個更可靠,但正如hackish的解決方法與Java迭代器:
for(Object a : list) {
Iterator<Object> biter = list.iter();
while(biter.next() != a) { };
for(; biter.hasNext();) {
Object b = biter.next();
一般情況下,Java的語法的foreach是for(Clazz object : iterable) {
「可愛」,但強大得多比Iterator
秒。實際上,上面的循環的舊整數也像魅力一樣。
什麼是更好的方法? – jmasterx
邊界框更好的方法?也許最近鄰問題的掃描線算法?但它看起來像你在這裏的微觀優化。我不認爲它會支付你賬單? – Bytemain