µ±Ç°Î»Öà ²©ÎÄÊ×Ò³ > weixin_33883178µÄ²©¿Í£º½ÌÃÃѧ Java£º´óÓпÉΪµÄ¼¯ºÏ
¡°¶þ¸ç,ÉÏһƪ¡¶·ºÐÍ¡·µÄ·´ÏìЧ¹ûÔõôÑù°¡?¡±ÈýÃöÔËýÌáÒéµÄ¡¶½ÌÃÃѧ Java¡·×¨À¸ºÜÊǹØÐÄ¡£
¡°ÓÐÈËÆÀÂÛ˵,¡®¶þ¸çÄãÇôúÂ붼Çóö»ÃÏëÁË°¡¡£¡¯¡±
¡°ºÇºÇ,Õâ¾ä»°³ä³â×ÅÂúÂúµÄ·í´ÌÒâζ°¡¡£¡±ÈýÃÃÓеãÄѹýÁËÆðÀ´¡£
¡°²»¹ý,Ò²ÓÐÈËÆÀÂÛ˵,¡®½¨ÒéÕâ¸öϵÁеÄÎÄÕ¶àд°¡,ÒòΪÎÒ»¨ÁË°ë¸öÔ¶¼Ã»¿´¶®¡¶ Java ±à³Ì˼Ïë¡·ÖйØÓÚ·ºÐ͵Ľ²½â,µ«ÔÙ¿´ÍêÕâƪÎÄÕºóÖÕÓÚÈÚ»á¹áͨÁË,±ÈÐÄ¡£¡¯¡±
¡°¶þ¸ç,ÄãÄܲ»ÄÜÏÈ˵ºÃÏûÏ¢°¡?ÕæÊǵġ£ÎÒÒ²Òª¸øÕâλůÐĵĶÁÕß±ÈÐÄÁË¡£¡±ÈýÃÃ˵ÍêÕâ¾ä»°¾ÍÔÚÎÒÃæÇ°±ÈÁËÒ»¸öÐÄ,ÎÒ³òÁËËýÒ»ÑÛ,·¢ÏÖËý֮ǰµÄ³îÈÝÒ²ÎÞÓ°ÎÞ×ÙÁË¡£
¡°ÄǽÓÏÂÀ´,¶þ¸ç»¹Òª¼ÌÐøдÂð?¡±ÎÒ¿´µ½ÁËÈýÃÃÉîÇéµÄÄ¿¹â¡£
¡°àÅ,ÎÒÏë¸Ãд¼¯ºÏÁË¡£¡±
¡°ÄǾÍÈÃÎÒ¼ÌÐøÀ´ÌáÎÊ°É,¶þ¸çÄã¼ÌÐøÀ´»Ø´ð¡£¡±ÈýÃÃÒѾԾԾÓûÊÔÁË¡£
ÈýÃÃ,Ìý¸çÂýÂý¸øÄã½²°¡¡£
JDK 1.2 µÄʱºòÒýÈëÁ˼¯ºÏµÄ¸ÅÄî,ÓÃÀ´°üº¬Ò»×éÊý¾Ý½á¹¹¡£ÓëÊý×鲻ͬµÄÊÇ,ÕâЩÊý¾Ý½á¹¹µÄ´æ´¢¿Õ¼ä»áËæ×ÅÔªËØÔö¼Ó¶ø¶¯Ì¬Ôö¼Ó¡£ÆäÖÐ,ÓÐһЩ¼¯ºÏÀàÖ§³ÖÌí¼ÓÖظ´ÔªËØ,¶øÁíһЩ²»Ö§³Ö;ÓÐһЩ֧³ÖÌí¼Ó null
ÔªËØ,¶øÁíһЩ²»Ö§³Ö¡£
¿ÉÒÔ¸ù¾Ý¼Ì³ÐÌåϵ½«¼¯ºÏ·ÖΪÁ½´óÀà,Ò»ÀàʵÏÖÁË Collection
½Ó¿Ú(¼ûͼ 1),ÁíÒ»ÀàʵÏÖÁË Map
½Ó¿Ú(¼ûͼ 2)¡£
½éÉÜÒ»ÏÂͼ 1:
1)Collection
ÊÇËùÓм¯ºÏÀàµÄ¸ù½Ó¿Ú¡£
2)Set
½Ó¿ÚµÄʵÏÖÀ಻ÔÊÐíÖظ´µÄÔªËØ,ÀýÈç HashSet
¡¢LinkedHashSet
¡£
3)List
½Ó¿ÚµÄʵÏÖÀàÔÊÐíÖظ´ÔªËØ,¿Éͨ¹ý index
·ÃÎʶÔӦλÖÃÉϵÄÔªËØ,ÀýÈç LinkedList
¡¢ArrayList
¡£
4)Queue
½Ó¿ÚµÄʵÏÖÀàÔÊÐíÔÚ¶ÓÁеÄβ²¿»òÕßÍ·²¿Ôö¼Ó»òÕßɾ³ýÔªËØ,ÀýÈç PriorityQueue
¡£
½éÉÜÒ»ÏÂͼ 2:
1)HashMap
ÊÇ×î³£ÓÃµÄ Map
,¿ÉÒÔ¸ù¾Ý¼üÖ±½Ó»ñÈ¡¶ÔÓ¦µÄÖµ,Ëü¸ù¾Ý¼üµÄ hashCode
Öµ´æ´¢Êý¾Ý,ËùÒÔ·ÃÎÊËٶȷdz£¿ì¡£HashMap
×î¶àÖ»ÔÊÐíÒ»Ìõ¼Ç¼µÄ¼üΪ null
(¶àÌõ»á¸²¸Ç);µ«ÔÊÐí¶àÌõ¼Ç¼µÄֵΪ null
¡£
2)TreeMap
Äܹ»°ÑËü±£´æµÄ¼Ç¼¸ù¾Ý¼ü(²»ÔÊÐí¼üµÄֵΪ null
)ÅÅÐò,ĬÈÏÊÇÉýÐò,Ò²¿ÉÒÔÖ¸¶¨ÅÅÐòµÄ±È½ÏÆ÷,µ±Óõü´úÆ÷(Iterator
)±éÀú TreeMap
ʱ,µÃµ½µÄ¼Ç¼ÊÇÅŹýÐòµÄ¡£
3)Hashtable
µÄ¼üºÍÖµ¾ù²»ÔÊÐíΪ null
,ÊÇÏß³Ìͬ²½µÄ,Ò²¾ÍÊÇ˵ÈÎһʱ¿ÌÖ»ÓÐÒ»¸öÏß³ÌÄÜд Hashtable
,Ïß³Ìͬ²½»áÏûºÄµôһЩÐÔÄÜ,Òò´Ë Hashtable
ÔÚдÈëʱ»¨·ÑµÄʱ¼äÒ²»á±È½Ï¶à¡£
4)LinkedHashMap
±£´æÁ˼ǼµÄ²åÈë˳Ðò,µ±Óõü´úÆ÷(Iterator
)±éÀú LinkedHashMap
ʱ,Ïȵõ½µÄ¼Ç¼¿Ï¶¨ÊÇÏȲåÈëµÄ¡£¼üºÍÖµ¾ùÔÊÐíΪ null
¡£
ÓÐÁ˼¯ºÏµÄ°ïÖú,³ÌÐòÔ±²»ÔÙÐèÒªÇ××ÔʵÏÖÔªËصÄÅÅÐò¡¢²éÕҵȵײãËã·¨ÁË¡£ÁíÍâ,»ùÓÚÊý×éʵÏֵļ¯ºÏÀàÔÚƵ·±¶ÁȡʱÐÔÄܸü¼Ñ,±ÈÈç˵ ArrayList
;»ùÓÚ¶ÓÁÐʵÏֵļ¯ºÏÀàÔÚƵ·±Ôö¼Ó¡¢¸üС¢É¾³ýÊý¾ÝʱЧÂʸü¸ß,±ÈÈç˵ LinkedList
;³ÌÐòÔ±ËùÒª×öµÄ¾ÍÊÇ,¸ù¾ÝÒµÎñÐèҪѡÔñÊʵ±µÄ¼¯ºÏÀà,ÖÁÓÚÐÔÄܵ÷ÓÅÂï,¿ÉÒÔ΢ÐÅÕÒ¶þ¸ç¡£
ÈýÃÃ,¸ÕÌáÍêÎÊÌâ¾Í´òíï°¡,¼ÌÐøÌý¸ç¸øÄãÂýÂý½²°¡¡£
LinkedList
ÆäʵÊÇÒ»¸öË«ÏòÁ´±í,À´¿´Ô´Âë¡£
public class LinkedList<E>
{
transient int size = 0;
/**
* Pointer to first node.
* Invariant: (first == null && last == null) ||
* (first.prev == null && first.item != null)
*/
transient Node<E> first;
/**
* Pointer to last node.
* Invariant: (first == null && last == null) ||
* (last.next == null && last.item != null)
*/
transient Node<E> last;
private static class Node<E> {
E item;
Node<E> next;
Node<E> prev;
Node(Node<E> prev, E element, Node<E> next) {
this.item = element;
this.next = next;
this.prev = prev;
}
}
}
¸´ÖÆ´úÂë
1)LinkedList
°üº¬Ò»¸ö·Ç³£ÖØÒªµÄÄÚ²¿Àࡪ¡ªNode
¡£Node
ÊǽڵãËù¶ÔÓ¦µÄÊý¾Ý½á¹¹,item
Ϊµ±Ç°½ÚµãµÄÖµ,prev
ΪÉÏÒ»¸ö½Úµã,next
ΪÏÂÒ»¸ö½Úµã¡ª¡ªÕâÒ²ÕýÊÇ¡°Ë«Ïò¡±Á´±íµÄÔÒò¡£first
Ϊ LinkedList
µÄµÚÒ»¸ö½Úµã,last
Ϊ×îºóÒ»¸ö½Úµã¡£
2)size
ÊÇ LinkedList
µÄ½Úµã¸öÊý¡£µ±Íù LinkedList
Ìí¼ÓÒ»¸öÔªËØʱ,size+1,ɾ³ýÒ»¸öÔªËØʱ,size-1¡£
ArrayList
ÆäʵÊÇÒ»¸ö¶¯Ì¬Êý×é,À´¿´Ô´Âë¡£
public class ArrayList<E>
{
/**
* The array buffer into which the elements of the ArrayList are stored.
* The capacity of the ArrayList is the length of this array buffer. Any
* empty ArrayList with elementData == DEFAULTCAPACITY_EMPTY_ELEMENTDATA
* will be expanded to DEFAULT_CAPACITY when the first element is added.
*/
transient Object[] elementData; // non-private to simplify nested class access
/**
* The size of the ArrayList (the number of elements it contains).
*
* @serial
*/
private int size;
}
¸´ÖÆ´úÂë
1)elementData
ÊÇ Object
ÀàÐ͵ÄÊý×é,ÓÃÀ´±£´æÌí¼Óµ½ ArrayList
ÖеÄÔªËØ¡£Èç¹ûͨ¹ýĬÈϹ¹Ôì²ÎÊý´´½¨ ArrayList
¶ÔÏóʱ,elementData
µÄĬÈÏ´óСÊÇ 10¡£µ± ArrayList
ÈÝÁ¿²»×ãÒÔÈÝÄÉÈ«²¿ÔªËØʱ,¾Í»áÖØÐÂÉèÖÃÈÝÁ¿,еÄÈÝÁ¿ = ÔʼÈÝÁ¿ + (ÔʼÈÝÁ¿ >> 1)
(²ÎÕÕÒÔÏ´úÂë)¡£
private void grow(int minCapacity) {
// overflow-conscious code
int oldCapacity = elementData.length;
int newCapacity = oldCapacity + (oldCapacity >> 1);
elementData = Arrays.copyOf(elementData, newCapacity);
}
¸´ÖÆ´úÂë
>>
ÔËËã·û»¹Ã»ÓмÝÔ¦ÁË¡£²»¹ý,ͨ¹ý´úÂë²âÊÔºóµÄ½áÂÛÊÇ,µ±ÔʼÈÝÁ¿Îª 10 µÄʱºò,еÄÈÝÁ¿Îª 15;µ±ÔʼÈÝÁ¿Îª 20 µÄʱºò,еÄÈÝÁ¿Îª 30¡£
2) size
ÊÇ ArrayList
µÄÔªËظöÊý¡£µ±Íù ArrayList
Ìí¼ÓÒ»¸öÔªËØʱ,size+1,ɾ³ýÒ»¸öÔªËØʱ,size-1¡£
ÓÉÓÚ LinkedList
ºÍ ArrayList
µ×²ãʵÏֵIJ»Í¬(Ò»¸öË«ÏòÁ´±í,Ò»¸ö¶¯Ì¬Êý×é),ËüÃÇÖ®¼äµÄÇø±ðÒ²ºÜһĿÁËÈ»¡£
¹Ø¼üµã1 :LinkedList
ÔÚÌí¼Ó(add(E e)
)¡¢²åÈë(add(int index, E element)
)¡¢É¾³ý(remove(int index)
)ÔªËصÄÐÔÄÜÉÏÔ¶³¬ ArrayList
¡£
ΪʲôÄØ?ÏÈÀ´¿´ ArrayList
µÄÏà¹ØÔ´Âë¡£
// ensureCapacityInternal() ·½·¨ÄÚ²¿»áµ÷Óà System.arraycopy()
public boolean add(E e) {
ensureCapacityInternal(size + 1); // Increments modCount!!
elementData[size++] = e;
return true;
}
public void add(int index, E element) {
System.arraycopy(elementData, index, elementData, index + 1,
size - index);
elementData[index] = element;
size++;
}
public E remove(int index) {
E oldValue = elementData(index);
int numMoved = size - index - 1;
if (numMoved > 0)
System.arraycopy(elementData, index+1, elementData, index,
numMoved);
elementData[--size] = null; // clear to let GC do its work
return oldValue;
}
¸´ÖÆ´úÂë
¹Û²ì ArrayList
µÄÔ´Âë,¾ÍÄܹ»·¢ÏÖ,ArrayList
ÔÚÌí¼Ó¡¢²åÈ롢ɾ³ýÔªËصÄʱºò,»áÓÐÒâ»òÕßÎÞÒâ(À©ÈÝ)µÄµ÷Óà System.arraycopy(Object src, int srcPos, Object dest, int destPos, int length)
·½·¨,¸Ã·½·¨¶ÔÐÔÄܵÄËðºÄÊǷdz£ÑÏÖصġ£
ÔÙÀ´¿´ LinkedList
µÄÏà¹ØÔ´Âë¡£
/**
* Links e as last element.
*/
void linkLast(E e) {
final Node<E> l = last;
final Node<E> newNode = new Node<>(l, e, null);
last = newNode;
if (l == null)
first = newNode;
else
l.next = newNode;
}
/**
* Unlinks non-null node x.
*/
E unlink(Node<E> x) {
if (prev == null) {
first = next;
} else {
prev.next = next;
x.prev = null;
}
if (next == null) {
last = prev;
} else {
next.prev = prev;
x.next = null;
}
x.item = null;
return element;
}
¸´ÖÆ´úÂë
LinkedList
²»´æÔÚÀ©ÈݵÄÎÊÌâ,Ò²²»ÐèÒª¶ÔÔÓеÄÔªËؽøÐи´ÖÆ;Ö»ÐèÒª¸Ä±ä½ÚµãµÄÊý¾Ý¾ÍºÃÁË¡£
¹Ø¼üµã2:LinkedList
ÔÚ²éÕÒÔªËØʱҪÂýÓÚ ArrayList
¡£
ΪʲôÄØ?ÏÈÀ´¿´ LinkedList µÄÏà¹ØÔ´Âë¡£
/**
* Returns the (non-null) Node at the specified element index.
*/
Node<E> node(int index) {
// assert isElementIndex(index);
if (index < (size >> 1)) {
Node<E> x = first;
for (int i = 0; i < index; i++)
x = x.next;
return x;
} else {
Node<E> x = last;
for (int i = size - 1; i > index; i--)
x = x.prev;
return x;
}
}
¸´ÖÆ´úÂë
¹Û²ì LinkedList
µÄÔ´Âë,¾ÍÄܹ»·¢ÏÖ, LinkedList
ÔÚ¶¨Î» index
µÄʱºò»áÏÈÅжÏλÖÃ(ÊÇÔÚ 1 / 2 µÄÇ°Ã滹ÊǺóÃæ),ÔÙ´ÓÇ°Íùºó»òÕß´ÓºóÍùÇ°Ö´ÐÐ for
Ñ»·ÒÀ´ÎÕÒ¡£
ÔÙÀ´¿´ ArrayList
µÄÏà¹ØÔ´Âë¡£
@SuppressWarnings("unchecked")
E elementData(int index) {
return (E) elementData[index];
}
¸´ÖÆ´úÂë
ArrayList
Ö±½Ó¸ù¾Ý index
´ÓÊý×éÖÐÈ¡³ö¸ÃλÖÃÉϵÄÔªËØ,²»ÐèÒª for
Ñ»·±éÀú°¡¡ª¡ªÕâÑùÏÔÈ»¸ü¿ì!
ÈýÃÃ,ÌáÎÊÌâÔ½À´Ô½ÓÐÒÕÊõÁË°¡?¼ÌÐøÌý¸ç¸øÄãÂýÂý½²°¡¡£
HashMap
´æ´¢µÄÊǼüÖµ¶Ô,Æä¼üÊÇÒ»¸ö¹þÏ£Âë(Hash µÄÖ±Òë,Ò²³Æ×÷É¢ÁÐ)¡£À´¿´Ô´Âë¡£
public class HashMap<K,V>
{
transient Node<K,V>[] table;
static class Node<K,V> implements Map.Entry<K,V> {
final int hash;
final K key;
V value;
Node<K,V> next;
}
public HashMap(int initialCapacity, float loadFactor) {
this.loadFactor = loadFactor;
this.threshold = tableSizeFor(initialCapacity);
}
}
¸´ÖÆ´úÂë
1)table
ÊÇÒ»¸ö Node
Êý×é,¶ø Node
ÊÇÒ»¸öµ¥ÏòÁ´±í(Ö»ÓÐ next)¡£HashMap
µÄ¼üÖµ¶Ô¾Í´æ´¢ÔÚ table
Êý×éÖС£
2)loadFactor
¾ÍÊÇ´óÃû¶¦¶¦µÄ¼ÓÔØÒò×Ó,ĬÈϵļÓÔØÒò×ÓÊÇ 0.75, ¾Ý˵ÕâÊÇÔÚʱ¼äºÍ¿Õ¼ä³É±¾ÉÏÑ°ÇóµÄÒ»ÖÖÕÛÖÔ¡£
3)initialCapacity
¾ÍÊdzõʼÈÝÁ¿,ĬÈÏΪ 16¡£ ?? 4)threshold
ÊÇ HashMap
µÄãÐÖµ¡ª¡ªÅжÏÊÇ·ñÐèÒª¶Ô HashMap
½øÐÐÀ©ÈÝ,threshold
µÄÖµ = ÈÝÁ¿ * ¼ÓÔØÒò×Ó,µ± HashMap
Öд洢µÄÊý¾ÝÊýÁ¿´ïµ½ threshold
ʱ,¾ÍÐèÒª½« HashMap
µÄÈÝÁ¿¼Ó±¶¡£
¡°³õʼÈÝÁ¿¡± ºÍ ¡°¼ÓÔØÒò×Ó¡±¶Ô HashMap
µÄÐÔÄÜÓ°ÏìÆÄ´ó¡£ÈÝÁ¿ÊÇ HashMap
ÖÐÍ°(¼ûÏÂͼ)µÄÊýÁ¿,³õʼÈÝÁ¿Ö»ÊÇ HashMap
ÔÚ´´½¨Ê±µÄÈÝÁ¿¡£¼ÓÔØÒò×ÓÊÇ HashMap
ÔÚÆäÈÝÁ¿×Ô¶¯Ôö¼Ó֮ǰ¿ÉÒÔ´ïµ½¶àÂúµÄÒ»Öֳ߶ȡ£
TreeMap
´æ´¢µÄÊÇÓÐÐòµÄ¼üÖµ¶Ô,»ùÓÚºìºÚÊ÷(Red-Black tree)ʵÏÖ¡£¿ÉÒÔÔÚ³õʼ»¯µÄʱºòÖ¸¶¨¼üλµÄÅÅÐò·½Ê½,Èç¹ûûÓÐÖ¸¶¨µÄ»°¾Í¸ù¾Ý¼üλµÄ×ÔȻ˳Ðò½øÐÐÅÅÐò¡£À´¿´Ô´Âë¡£
public class TreeMap<K,V>
{
private final Comparator<? super K> comparator;
private transient Entry<K,V> root;
private static final boolean RED = false;
private static final boolean BLACK = true;
static final class Entry<K,V> implements Map.Entry<K,V> {
K key;
V value;
Entry<K,V> left;
Entry<K,V> right;
Entry<K,V> parent;
boolean color = BLACK;
}
}
¸´ÖÆ´úÂë
1)root
ÊǺìºÚÊ÷µÄ¸ù½Úµã,ÊÇÒ»¸ö Entry
ÀàÐÍ(°´ÕÕ key ½øÐÐÅÅÐò),°üº¬ÁË key(¼ü)¡¢value(Öµ)¡¢left(×ó±ßµÄ×Ó½Úµã)¡¢right(ÓұߵÄ×Ó½Úµã)¡¢parent(¸¸½Úµã)¡¢color(ÑÕÉ«)¡£
2)comparator
ÊǺìºÚÊ÷µÄÅÅÐò·½Ê½,ÊÇÒ»¸ö Comparator
½Ó¿ÚÀàÐÍ,¸Ã½Ó¿ÚÀïÃæÓÐÒ»¸ö compare
·½·¨,ÓÐÁ½¸ö²ÎÊý T o1
ºÍ T o2
,ÊÇ·ºÐ͵ıíʾ·½Ê½,±íʾ´ý±È½ÏµÄÁ½¸ö¶ÔÏó,¸Ã·½·¨µÄ·µ»ØÖµÊÇÒ»¸öÕûÐÎ, o1´óÓÚo2,·µ»ØÕýÕûÊý; o1µÈÓÚo2,·µ»Ø0;o1СÓÚo3,·µ»Ø¸ºÕûÊý¡£
×ܽáһϾÍÊÇ,HashMap
ÊÊÓÃÓÚÔÚ Map
ÖвåÈ롢ɾ³ýºÍ¶¨Î»ÔªËØ;TreeMap
ÊÊÓÃÓÚ°´×ÔȻ˳Ðò»ò×Ô¶¨Òå˳Ðò±éÀú¼ü(key)¡£
ÈýÃÃ,ûÓÐÈκÎÎÊÌâ,°üÔÚÎÒÉíÉÏ¡£²»¹ý,ÔÚ½²Ö®Ç°,ÄãÄÜÏÈÈ¥¸ø¸çÅݱ¿§·ÈÂð?
ͨ³£,ÎÒÃÇ´ÓÊý×éÖвéÕÒÒ»¸öÔªËØʱ,ÐèÒª¶ÔÕû¸öÊý×é½øÐбéÀú¡£µ«Èç¹ûÕâ¸öÊý×éÊÇÅÅÐò¹ýµÄ,¾Í¿ÉÒÔ½øÐжþ·Ö²éÕÒÁË¡£
¶þ·Ö²éÕҵķ½Ê½:
µÚÒ»²½,½«Êý×éÖмäλÖÃÉϵÄÔªËØÓëÒª²éÕҵĶÔÏó½øÐбȽÏ,Èç¹ûÁ½ÕßÏàµÈ,Ôò²éÕҳɹ¦;·ñÔò½øÐеڶþ²½¡£
µÚ¶þ²½,ÀûÓÃÖмäλÖý«Êý×é·Ö¸î³ÉÇ°¡¢ºóÁ½¸ö×Ó¼¯¡£
µÚÈý²½,±È½ÏÒª²éÕҵĶÔÏóÓëÖмäλÖÃÉϵÄÔªËØ,Èç¹ûÇ°Õß´óÓÚºóÕß,ÔòÔÚºóÃæµÄ×Ó¼¯Öа´ÕÕ֮ǰµÄ·½Ê½½øÐвéÕÒ;·ñÔò,ÔÚÇ°ÃæµÄ×Ó¼¯Öа´ÕÕ֮ǰµÄ·½Ê½½øÐвéÕÒ¡£
ÕâÑù×ö¿ÉÒÔ½«²éÕÒ·¶Î§Ëõ¼õÒ»°ë,´ó´óµÄ¼õÉÙÁ˲éѯµÄ´ÎÊý¡£
Collections
ÀàµÄ binarySearch()
·½·¨ÊµÏÖÁ˶þ·Ö²éÕÒÕâ¸öËã·¨,¿ÉÒÔÖ±½ÓʹÓÃ,Ç°ÌáÊÇÏÈÒªÅÅÐò,·ñÔò½«·µ»Ø -2¡£Ô´ÂëÈçÏ¡£
private static <T>
int indexedBinarySearch(List<? extends Comparable<? super T>> list, T key) {
int low = 0;
int high = list.size()-1;
while (low <= high) {
int mid = (low + high) >>> 1;
Comparable<? super T> midVal = list.get(mid);
int cmp = midVal.compareTo(key);
if (cmp < 0)
low = mid + 1;
else if (cmp > 0)
high = mid - 1;
else
return mid; // key found
}
return -(low + 1); // key not found
}
¸´ÖÆ´úÂë
ÎÒÃÇÀ´²âÊÔһϡ£
List<String> list1 = new ArrayList<>();
list1.add("³Á");
list1.add("Ĭ");
list1.add("Íõ");
list1.add("¶þ");
Collections.sort(list1); // ÏÈÒªÅÅÐò
System.out.println(Collections.binarySearch(list1, "Íõ")); // 2
¸´ÖÆ´úÂë
¡°¶þ¸ç,ÖÕÓÚ½²Í꡶¼¯ºÏ¡·ÁË,ºÈ¿Ú¿§·È°É!¡±ÈýÃõÄ̬¶ÈºÜÌåÌù¡£
¡°Ð»Ð»¡£¡±
¡°¶þ¸ç,Èç¹ûÕâƪÎÄÕ¼ÌÐøÔâÊܵ½ÅúÆÀ,Äã»á²»»áÆøÄÙ°¡?¡±ÈýÃÃÕ£ÁËÕ£ÑÛ¾¦,¼ÌÐøÎÊÎÒ,ÎÒ¿´µ½Ëý³¤³¤µÄ½Þë,ÕæµÄºÜÃÀ¡£
¡°àÅ,¶ÔÓÚ×÷ÕßÀ´Ëµ,µ±È»Ï£ÍûÎÄÕÂÄܹ»µÃµ½ÕýÃæµÄ·´À¡,Èç¹ûÊǸºÃæµÄ·´À¡,ÄÇÒ²ÔÚÎÒµÄÒâÁÏÖ®ÖС£¡±
¡°ÎªÉ¶?¡±ÈýÃúܺÃÆæ¡£
¡°¡¶½ÌÃÃѧ Java¡·ÊÇÒ»ÖÖ´´ÐµÄд×÷ÊÖ·¨,ÊÐÃæÉÏ»¹Ã»ÓÐ,ÐÂÏÊ¡¢ÓÐȤµÄÊÂÎï×ÜÐèÒªÒ»¶Îʱ¼ä²ÅÄܱ»´óÖÚ½ÓÊÜ,·ñÔòÒ²¾Í²»½Ð´´ÐÂÁË¡£¡±
¡°¶þ¸ç,ΪÄãµÄÓÂÆøµãÔÞ!¡±¿´µ½ÈýÃúÜΪÎÒ½¾°ÁµÄÑù×Ó,ÎÒµÄÐÄÀïÊ¢¿ªÁËÒ»¶äĵµ¤»¨¡£
cs