Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
dragonwell8_jdk
提交
3fa1612e
D
dragonwell8_jdk
项目概览
openanolis
/
dragonwell8_jdk
通知
4
Star
2
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
D
dragonwell8_jdk
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
3fa1612e
编写于
4月 18, 2012
作者:
M
michaelm
浏览文件
操作
浏览文件
下载
差异文件
Merge
上级
1e594a18
1a559f15
变更
32
隐藏空白更改
内联
并排
Showing
32 changed file
with
464 addition
and
342 deletion
+464
-342
src/share/classes/java/util/AbstractCollection.java
src/share/classes/java/util/AbstractCollection.java
+2
-0
src/share/classes/java/util/AbstractList.java
src/share/classes/java/util/AbstractList.java
+1
-1
src/share/classes/java/util/AbstractMap.java
src/share/classes/java/util/AbstractMap.java
+4
-4
src/share/classes/java/util/AbstractSet.java
src/share/classes/java/util/AbstractSet.java
+1
-1
src/share/classes/java/util/ArrayDeque.java
src/share/classes/java/util/ArrayDeque.java
+3
-1
src/share/classes/java/util/ArrayList.java
src/share/classes/java/util/ArrayList.java
+1
-2
src/share/classes/java/util/Arrays.java
src/share/classes/java/util/Arrays.java
+13
-4
src/share/classes/java/util/Calendar.java
src/share/classes/java/util/Calendar.java
+2
-2
src/share/classes/java/util/Collections.java
src/share/classes/java/util/Collections.java
+30
-12
src/share/classes/java/util/ComparableTimSort.java
src/share/classes/java/util/ComparableTimSort.java
+5
-8
src/share/classes/java/util/Currency.java
src/share/classes/java/util/Currency.java
+1
-1
src/share/classes/java/util/EnumMap.java
src/share/classes/java/util/EnumMap.java
+19
-17
src/share/classes/java/util/EnumSet.java
src/share/classes/java/util/EnumSet.java
+11
-7
src/share/classes/java/util/HashMap.java
src/share/classes/java/util/HashMap.java
+54
-38
src/share/classes/java/util/HashSet.java
src/share/classes/java/util/HashSet.java
+4
-2
src/share/classes/java/util/Hashtable.java
src/share/classes/java/util/Hashtable.java
+69
-56
src/share/classes/java/util/IdentityHashMap.java
src/share/classes/java/util/IdentityHashMap.java
+22
-12
src/share/classes/java/util/IllegalFormatConversionException.java
...e/classes/java/util/IllegalFormatConversionException.java
+1
-1
src/share/classes/java/util/JumboEnumSet.java
src/share/classes/java/util/JumboEnumSet.java
+10
-9
src/share/classes/java/util/LinkedHashMap.java
src/share/classes/java/util/LinkedHashMap.java
+6
-4
src/share/classes/java/util/Observable.java
src/share/classes/java/util/Observable.java
+2
-2
src/share/classes/java/util/PriorityQueue.java
src/share/classes/java/util/PriorityQueue.java
+15
-5
src/share/classes/java/util/Properties.java
src/share/classes/java/util/Properties.java
+11
-11
src/share/classes/java/util/PropertyPermission.java
src/share/classes/java/util/PropertyPermission.java
+16
-11
src/share/classes/java/util/RegularEnumSet.java
src/share/classes/java/util/RegularEnumSet.java
+11
-10
src/share/classes/java/util/ResourceBundle.java
src/share/classes/java/util/ResourceBundle.java
+4
-3
src/share/classes/java/util/ServiceLoader.java
src/share/classes/java/util/ServiceLoader.java
+5
-5
src/share/classes/java/util/TimeZone.java
src/share/classes/java/util/TimeZone.java
+3
-3
src/share/classes/java/util/TreeMap.java
src/share/classes/java/util/TreeMap.java
+77
-72
src/share/classes/java/util/TreeSet.java
src/share/classes/java/util/TreeSet.java
+6
-8
src/share/classes/java/util/WeakHashMap.java
src/share/classes/java/util/WeakHashMap.java
+1
-1
test/sun/net/www/protocol/jar/B4957695.java
test/sun/net/www/protocol/jar/B4957695.java
+54
-29
未找到文件。
src/share/classes/java/util/AbstractCollection.java
浏览文件 @
3fa1612e
...
...
@@ -170,6 +170,7 @@ public abstract class AbstractCollection<E> implements Collection<E> {
* @throws ArrayStoreException {@inheritDoc}
* @throws NullPointerException {@inheritDoc}
*/
@SuppressWarnings
(
"unchecked"
)
public
<
T
>
T
[]
toArray
(
T
[]
a
)
{
// Estimate size of array; be prepared to see more or fewer elements
int
size
=
size
();
...
...
@@ -216,6 +217,7 @@ public abstract class AbstractCollection<E> implements Collection<E> {
* @return array containing the elements in the given array, plus any
* further elements returned by the iterator, trimmed to size
*/
@SuppressWarnings
(
"unchecked"
)
private
static
<
T
>
T
[]
finishToArray
(
T
[]
r
,
Iterator
<?>
it
)
{
int
i
=
r
.
length
;
while
(
it
.
hasNext
())
{
...
...
src/share/classes/java/util/AbstractList.java
浏览文件 @
3fa1612e
...
...
@@ -516,7 +516,7 @@ public abstract class AbstractList<E> extends AbstractCollection<E> implements L
return
false
;
ListIterator
<
E
>
e1
=
listIterator
();
ListIterator
e2
=
((
List
)
o
).
listIterator
();
ListIterator
<?>
e2
=
((
List
<?>
)
o
).
listIterator
();
while
(
e1
.
hasNext
()
&&
e2
.
hasNext
())
{
E
o1
=
e1
.
next
();
Object
o2
=
e2
.
next
();
...
...
src/share/classes/java/util/AbstractMap.java
浏览文件 @
3fa1612e
...
...
@@ -443,7 +443,7 @@ public abstract class AbstractMap<K,V> implements Map<K,V> {
if
(!(
o
instanceof
Map
))
return
false
;
Map
<
K
,
V
>
m
=
(
Map
<
K
,
V
>)
o
;
Map
<
?,?>
m
=
(
Map
<?,?
>)
o
;
if
(
m
.
size
()
!=
size
())
return
false
;
...
...
@@ -534,7 +534,7 @@ public abstract class AbstractMap<K,V> implements Map<K,V> {
* @return a shallow copy of this map
*/
protected
Object
clone
()
throws
CloneNotSupportedException
{
AbstractMap
<
K
,
V
>
result
=
(
AbstractMap
<
K
,
V
>)
super
.
clone
();
AbstractMap
<
?,?>
result
=
(
AbstractMap
<?,?
>)
super
.
clone
();
result
.
keySet
=
null
;
result
.
values
=
null
;
return
result
;
...
...
@@ -652,7 +652,7 @@ public abstract class AbstractMap<K,V> implements Map<K,V> {
public
boolean
equals
(
Object
o
)
{
if
(!(
o
instanceof
Map
.
Entry
))
return
false
;
Map
.
Entry
e
=
(
Map
.
Entry
)
o
;
Map
.
Entry
<?,?>
e
=
(
Map
.
Entry
<?,?>
)
o
;
return
eq
(
key
,
e
.
getKey
())
&&
eq
(
value
,
e
.
getValue
());
}
...
...
@@ -783,7 +783,7 @@ public abstract class AbstractMap<K,V> implements Map<K,V> {
public
boolean
equals
(
Object
o
)
{
if
(!(
o
instanceof
Map
.
Entry
))
return
false
;
Map
.
Entry
e
=
(
Map
.
Entry
)
o
;
Map
.
Entry
<?,?>
e
=
(
Map
.
Entry
<?,?>
)
o
;
return
eq
(
key
,
e
.
getKey
())
&&
eq
(
value
,
e
.
getValue
());
}
...
...
src/share/classes/java/util/AbstractSet.java
浏览文件 @
3fa1612e
...
...
@@ -88,7 +88,7 @@ public abstract class AbstractSet<E> extends AbstractCollection<E> implements Se
if
(!(
o
instanceof
Set
))
return
false
;
Collection
c
=
(
Collection
)
o
;
Collection
<?>
c
=
(
Collection
<?>
)
o
;
if
(
c
.
size
()
!=
size
())
return
false
;
try
{
...
...
src/share/classes/java/util/ArrayDeque.java
浏览文件 @
3fa1612e
...
...
@@ -813,7 +813,8 @@ public class ArrayDeque<E> extends AbstractCollection<E>
*/
public
ArrayDeque
<
E
>
clone
()
{
try
{
ArrayDeque
<
E
>
result
=
(
ArrayDeque
<
E
>)
super
.
clone
();
@SuppressWarnings
(
"unchecked"
)
ArrayDeque
<
E
>
result
=
(
ArrayDeque
<
E
>)
super
.
clone
();
result
.
elements
=
Arrays
.
copyOf
(
elements
,
elements
.
length
);
return
result
;
...
...
@@ -849,6 +850,7 @@ public class ArrayDeque<E> extends AbstractCollection<E>
/**
* Deserialize this deque.
*/
@SuppressWarnings
(
"unchecked"
)
private
void
readObject
(
ObjectInputStream
s
)
throws
IOException
,
ClassNotFoundException
{
s
.
defaultReadObject
();
...
...
src/share/classes/java/util/ArrayList.java
浏览文件 @
3fa1612e
...
...
@@ -300,8 +300,7 @@ public class ArrayList<E> extends AbstractList<E>
*/
public
Object
clone
()
{
try
{
@SuppressWarnings
(
"unchecked"
)
ArrayList
<
E
>
v
=
(
ArrayList
<
E
>)
super
.
clone
();
ArrayList
<?>
v
=
(
ArrayList
<?>)
super
.
clone
();
v
.
elementData
=
Arrays
.
copyOf
(
elementData
,
size
);
v
.
modCount
=
0
;
return
v
;
...
...
src/share/classes/java/util/Arrays.java
浏览文件 @
3fa1612e
...
...
@@ -560,6 +560,7 @@ public class Arrays {
* off is the offset to generate corresponding low, high in src
* To be removed in a future release.
*/
@SuppressWarnings
({
"unchecked"
,
"rawtypes"
})
private
static
void
mergeSort
(
Object
[]
src
,
Object
[]
dest
,
int
low
,
...
...
@@ -746,6 +747,7 @@ public class Arrays {
* off is the offset into src corresponding to low in dest
* To be removed in a future release.
*/
@SuppressWarnings
({
"rawtypes"
,
"unchecked"
})
private
static
void
mergeSort
(
Object
[]
src
,
Object
[]
dest
,
int
low
,
int
high
,
int
off
,
...
...
@@ -1477,8 +1479,10 @@ public class Arrays {
while
(
low
<=
high
)
{
int
mid
=
(
low
+
high
)
>>>
1
;
Comparable
midVal
=
(
Comparable
)
a
[
mid
];
int
cmp
=
midVal
.
compareTo
(
key
);
@SuppressWarnings
(
"rawtypes"
)
Comparable
midVal
=
(
Comparable
)
a
[
mid
];
@SuppressWarnings
(
"unchecked"
)
int
cmp
=
midVal
.
compareTo
(
key
);
if
(
cmp
<
0
)
low
=
mid
+
1
;
...
...
@@ -2215,6 +2219,7 @@ public class Arrays {
* @throws NullPointerException if <tt>original</tt> is null
* @since 1.6
*/
@SuppressWarnings
(
"unchecked"
)
public
static
<
T
>
T
[]
copyOf
(
T
[]
original
,
int
newLength
)
{
return
(
T
[])
copyOf
(
original
,
newLength
,
original
.
getClass
());
}
...
...
@@ -2242,6 +2247,7 @@ public class Arrays {
* @since 1.6
*/
public
static
<
T
,
U
>
T
[]
copyOf
(
U
[]
original
,
int
newLength
,
Class
<?
extends
T
[]>
newType
)
{
@SuppressWarnings
(
"unchecked"
)
T
[]
copy
=
((
Object
)
newType
==
(
Object
)
Object
[].
class
)
?
(
T
[])
new
Object
[
newLength
]
:
(
T
[])
Array
.
newInstance
(
newType
.
getComponentType
(),
newLength
);
...
...
@@ -2470,8 +2476,9 @@ public class Arrays {
* @throws NullPointerException if <tt>original</tt> is null
* @since 1.6
*/
@SuppressWarnings
(
"unchecked"
)
public
static
<
T
>
T
[]
copyOfRange
(
T
[]
original
,
int
from
,
int
to
)
{
return
copyOfRange
(
original
,
from
,
to
,
(
Class
<
T
[]>)
original
.
getClass
());
return
copyOfRange
(
original
,
from
,
to
,
(
Class
<
?
extends
T
[]>)
original
.
getClass
());
}
/**
...
...
@@ -2509,6 +2516,7 @@ public class Arrays {
int
newLength
=
to
-
from
;
if
(
newLength
<
0
)
throw
new
IllegalArgumentException
(
from
+
" > "
+
to
);
@SuppressWarnings
(
"unchecked"
)
T
[]
copy
=
((
Object
)
newType
==
(
Object
)
Object
[].
class
)
?
(
T
[])
new
Object
[
newLength
]
:
(
T
[])
Array
.
newInstance
(
newType
.
getComponentType
(),
newLength
);
...
...
@@ -2851,6 +2859,7 @@ public class Arrays {
return
a
.
clone
();
}
@SuppressWarnings
(
"unchecked"
)
public
<
T
>
T
[]
toArray
(
T
[]
a
)
{
int
size
=
size
();
if
(
a
.
length
<
size
)
...
...
@@ -3634,7 +3643,7 @@ public class Arrays {
if
(
element
==
null
)
{
buf
.
append
(
"null"
);
}
else
{
Class
eClass
=
element
.
getClass
();
Class
<?>
eClass
=
element
.
getClass
();
if
(
eClass
.
isArray
())
{
if
(
eClass
==
byte
[].
class
)
...
...
src/share/classes/java/util/Calendar.java
浏览文件 @
3fa1612e
...
...
@@ -840,7 +840,7 @@ public abstract class Calendar implements Serializable, Cloneable, Comparable<Ca
* of a Locale.
*/
private
static
final
ConcurrentMap
<
Locale
,
int
[]>
cachedLocaleData
=
new
ConcurrentHashMap
<
Locale
,
int
[]
>(
3
);
=
new
ConcurrentHashMap
<>(
3
);
// Special values of stamp[]
/**
...
...
@@ -1499,7 +1499,7 @@ public abstract class Calendar implements Serializable, Cloneable, Comparable<Ca
DateFormatSymbols
symbols
=
DateFormatSymbols
.
getInstance
(
locale
);
String
[]
strings
=
getFieldStrings
(
field
,
style
,
symbols
);
if
(
strings
!=
null
)
{
Map
<
String
,
Integer
>
names
=
new
HashMap
<
String
,
Integer
>();
Map
<
String
,
Integer
>
names
=
new
HashMap
<>();
for
(
int
i
=
0
;
i
<
strings
.
length
;
i
++)
{
if
(
strings
[
i
].
length
()
==
0
)
{
continue
;
...
...
src/share/classes/java/util/Collections.java
浏览文件 @
3fa1612e
...
...
@@ -150,6 +150,7 @@ public class Collections {
* detects that the natural ordering of the list elements is
* found to violate the {@link Comparable} contract
*/
@SuppressWarnings
(
"unchecked"
)
public
static
<
T
extends
Comparable
<?
super
T
>>
void
sort
(
List
<
T
>
list
)
{
Object
[]
a
=
list
.
toArray
();
Arrays
.
sort
(
a
);
...
...
@@ -212,13 +213,14 @@ public class Collections {
* @throws IllegalArgumentException (optional) if the comparator is
* found to violate the {@link Comparator} contract
*/
@SuppressWarnings
({
"unchecked"
,
"rawtypes"
})
public
static
<
T
>
void
sort
(
List
<
T
>
list
,
Comparator
<?
super
T
>
c
)
{
Object
[]
a
=
list
.
toArray
();
Arrays
.
sort
(
a
,
(
Comparator
)
c
);
ListIterator
i
=
list
.
listIterator
();
ListIterator
<
T
>
i
=
list
.
listIterator
();
for
(
int
j
=
0
;
j
<
a
.
length
;
j
++)
{
i
.
next
();
i
.
set
(
a
[
j
]);
i
.
set
(
(
T
)
a
[
j
]);
}
}
...
...
@@ -357,9 +359,10 @@ public class Collections {
* or the search key is not mutually comparable with the
* elements of the list using this comparator.
*/
@SuppressWarnings
(
"unchecked"
)
public
static
<
T
>
int
binarySearch
(
List
<?
extends
T
>
list
,
T
key
,
Comparator
<?
super
T
>
c
)
{
if
(
c
==
null
)
return
binarySearch
((
List
)
list
,
key
);
return
binarySearch
((
List
<?
extends
Comparable
<?
super
T
>>
)
list
,
key
);
if
(
list
instanceof
RandomAccess
||
list
.
size
()<
BINARYSEARCH_THRESHOLD
)
return
Collections
.
indexedBinarySearch
(
list
,
key
,
c
);
...
...
@@ -406,9 +409,6 @@ public class Collections {
return
-(
low
+
1
);
// key not found
}
private
interface
SelfComparable
extends
Comparable
<
SelfComparable
>
{}
/**
* Reverses the order of the elements in the specified list.<p>
*
...
...
@@ -418,12 +418,16 @@ public class Collections {
* @throws UnsupportedOperationException if the specified list or
* its list-iterator does not support the <tt>set</tt> operation.
*/
@SuppressWarnings
({
"rawtypes"
,
"unchecked"
})
public
static
void
reverse
(
List
<?>
list
)
{
int
size
=
list
.
size
();
if
(
size
<
REVERSE_THRESHOLD
||
list
instanceof
RandomAccess
)
{
for
(
int
i
=
0
,
mid
=
size
>>
1
,
j
=
size
-
1
;
i
<
mid
;
i
++,
j
--)
swap
(
list
,
i
,
j
);
}
else
{
// instead of using a raw type here, it's possible to capture
// the wildcard but it will require a call to a supplementary
// private method
ListIterator
fwd
=
list
.
listIterator
();
ListIterator
rev
=
list
.
listIterator
(
size
);
for
(
int
i
=
0
,
mid
=
list
.
size
()>>
1
;
i
<
mid
;
i
++)
{
...
...
@@ -493,6 +497,7 @@ public class Collections {
* @throws UnsupportedOperationException if the specified list or its
* list-iterator does not support the <tt>set</tt> operation.
*/
@SuppressWarnings
({
"rawtypes"
,
"unchecked"
})
public
static
void
shuffle
(
List
<?>
list
,
Random
rnd
)
{
int
size
=
list
.
size
();
if
(
size
<
SHUFFLE_THRESHOLD
||
list
instanceof
RandomAccess
)
{
...
...
@@ -506,6 +511,9 @@ public class Collections {
swap
(
arr
,
i
-
1
,
rnd
.
nextInt
(
i
));
// Dump array back into list
// instead of using a raw type here, it's possible to capture
// the wildcard but it will require a call to a supplementary
// private method
ListIterator
it
=
list
.
listIterator
();
for
(
int
i
=
0
;
i
<
arr
.
length
;
i
++)
{
it
.
next
();
...
...
@@ -527,7 +535,11 @@ public class Collections {
* || j < 0 || j >= list.size()).
* @since 1.4
*/
@SuppressWarnings
({
"rawtypes"
,
"unchecked"
})
public
static
void
swap
(
List
<?>
list
,
int
i
,
int
j
)
{
// instead of using a raw type here, it's possible to capture
// the wildcard but it will require a call to a supplementary
// private method
final
List
l
=
list
;
l
.
set
(
i
,
l
.
set
(
j
,
l
.
get
(
i
)));
}
...
...
@@ -657,9 +669,10 @@ public class Collections {
* @throws NoSuchElementException if the collection is empty.
* @see Comparable
*/
@SuppressWarnings
({
"unchecked"
,
"rawtypes"
})
public
static
<
T
>
T
min
(
Collection
<?
extends
T
>
coll
,
Comparator
<?
super
T
>
comp
)
{
if
(
comp
==
null
)
return
(
T
)
min
((
Collection
<
SelfComparable
>)
(
Collection
)
coll
);
return
(
T
)
min
((
Collection
)
coll
);
Iterator
<?
extends
T
>
i
=
coll
.
iterator
();
T
candidate
=
i
.
next
();
...
...
@@ -727,9 +740,10 @@ public class Collections {
* @throws NoSuchElementException if the collection is empty.
* @see Comparable
*/
@SuppressWarnings
({
"unchecked"
,
"rawtypes"
})
public
static
<
T
>
T
max
(
Collection
<?
extends
T
>
coll
,
Comparator
<?
super
T
>
comp
)
{
if
(
comp
==
null
)
return
(
T
)
max
((
Collection
<
SelfComparable
>)
(
Collection
)
coll
);
return
(
T
)
max
((
Collection
)
coll
);
Iterator
<?
extends
T
>
i
=
coll
.
iterator
();
T
candidate
=
i
.
next
();
...
...
@@ -1389,7 +1403,9 @@ public class Collections {
extends
UnmodifiableSet
<
Map
.
Entry
<
K
,
V
>>
{
private
static
final
long
serialVersionUID
=
7854390611657943733L
;
@SuppressWarnings
({
"unchecked"
,
"rawtypes"
})
UnmodifiableEntrySet
(
Set
<?
extends
Map
.
Entry
<?
extends
K
,
?
extends
V
>>
s
)
{
// Need to cast to raw in order to work around a limitation in the type system
super
((
Set
)
s
);
}
public
Iterator
<
Map
.
Entry
<
K
,
V
>>
iterator
()
{
...
...
@@ -1408,13 +1424,15 @@ public class Collections {
};
}
@SuppressWarnings
(
"unchecked"
)
public
Object
[]
toArray
()
{
Object
[]
a
=
c
.
toArray
();
for
(
int
i
=
0
;
i
<
a
.
length
;
i
++)
a
[
i
]
=
new
UnmodifiableEntry
<>((
Map
.
Entry
<
K
,
V
>)
a
[
i
]);
a
[
i
]
=
new
UnmodifiableEntry
<>((
Map
.
Entry
<
?
extends
K
,
?
extends
V
>)
a
[
i
]);
return
a
;
}
@SuppressWarnings
(
"unchecked"
)
public
<
T
>
T
[]
toArray
(
T
[]
a
)
{
// We don't pass a to c.toArray, to avoid window of
// vulnerability wherein an unscrupulous multithreaded client
...
...
@@ -1422,7 +1440,7 @@ public class Collections {
Object
[]
arr
=
c
.
toArray
(
a
.
length
==
0
?
a
:
Arrays
.
copyOf
(
a
,
0
));
for
(
int
i
=
0
;
i
<
arr
.
length
;
i
++)
arr
[
i
]
=
new
UnmodifiableEntry
<>((
Map
.
Entry
<
K
,
V
>)
arr
[
i
]);
arr
[
i
]
=
new
UnmodifiableEntry
<>((
Map
.
Entry
<
?
extends
K
,
?
extends
V
>)
arr
[
i
]);
if
(
arr
.
length
>
a
.
length
)
return
(
T
[])
arr
;
...
...
@@ -1464,7 +1482,7 @@ public class Collections {
if
(!(
o
instanceof
Set
))
return
false
;
Set
s
=
(
Set
)
o
;
Set
<?>
s
=
(
Set
<?>
)
o
;
if
(
s
.
size
()
!=
c
.
size
())
return
false
;
return
containsAll
(
s
);
// Invokes safe containsAll() above
...
...
@@ -1493,7 +1511,7 @@ public class Collections {
return
true
;
if
(!(
o
instanceof
Map
.
Entry
))
return
false
;
Map
.
Entry
t
=
(
Map
.
Entry
)
o
;
Map
.
Entry
<?,?>
t
=
(
Map
.
Entry
<?,?>
)
o
;
return
eq
(
e
.
getKey
(),
t
.
getKey
())
&&
eq
(
e
.
getValue
(),
t
.
getValue
());
}
...
...
src/share/classes/java/util/ComparableTimSort.java
浏览文件 @
3fa1612e
...
...
@@ -114,7 +114,6 @@ class ComparableTimSort {
// Allocate temp storage (which may be increased later if necessary)
int
len
=
a
.
length
;
@SuppressWarnings
({
"unchecked"
,
"UnnecessaryLocalVariable"
})
Object
[]
newArray
=
new
Object
[
len
<
2
*
INITIAL_TMP_STORAGE_LENGTH
?
len
>>>
1
:
INITIAL_TMP_STORAGE_LENGTH
];
tmp
=
newArray
;
...
...
@@ -209,14 +208,13 @@ class ComparableTimSort {
* @param start the index of the first element in the range that is
* not already known to be sorted ({@code lo <= start <= hi})
*/
@SuppressWarnings
(
"fallthrough"
)
@SuppressWarnings
(
{
"fallthrough"
,
"rawtypes"
,
"unchecked"
}
)
private
static
void
binarySort
(
Object
[]
a
,
int
lo
,
int
hi
,
int
start
)
{
assert
lo
<=
start
&&
start
<=
hi
;
if
(
start
==
lo
)
start
++;
for
(
;
start
<
hi
;
start
++)
{
@SuppressWarnings
(
"unchecked"
)
Comparable
<
Object
>
pivot
=
(
Comparable
)
a
[
start
];
Comparable
pivot
=
(
Comparable
)
a
[
start
];
// Set left (and right) to the index where a[start] (pivot) belongs
int
left
=
lo
;
...
...
@@ -279,7 +277,7 @@ class ComparableTimSort {
* @return the length of the run beginning at the specified position in
* the specified array
*/
@SuppressWarnings
(
"unchecked"
)
@SuppressWarnings
(
{
"unchecked"
,
"rawtypes"
}
)
private
static
int
countRunAndMakeAscending
(
Object
[]
a
,
int
lo
,
int
hi
)
{
assert
lo
<
hi
;
int
runHi
=
lo
+
1
;
...
...
@@ -614,7 +612,7 @@ class ComparableTimSort {
* (must be aBase + aLen)
* @param len2 length of second run to be merged (must be > 0)
*/
@SuppressWarnings
(
"unchecked"
)
@SuppressWarnings
(
{
"unchecked"
,
"rawtypes"
}
)
private
void
mergeLo
(
int
base1
,
int
len1
,
int
base2
,
int
len2
)
{
assert
len1
>
0
&&
len2
>
0
&&
base1
+
len1
==
base2
;
...
...
@@ -731,7 +729,7 @@ class ComparableTimSort {
* (must be aBase + aLen)
* @param len2 length of second run to be merged (must be > 0)
*/
@SuppressWarnings
(
"unchecked"
)
@SuppressWarnings
(
{
"unchecked"
,
"rawtypes"
}
)
private
void
mergeHi
(
int
base1
,
int
len1
,
int
base2
,
int
len2
)
{
assert
len1
>
0
&&
len2
>
0
&&
base1
+
len1
==
base2
;
...
...
@@ -865,7 +863,6 @@ class ComparableTimSort {
else
newSize
=
Math
.
min
(
newSize
,
a
.
length
>>>
1
);
@SuppressWarnings
({
"unchecked"
,
"UnnecessaryLocalVariable"
})
Object
[]
newArray
=
new
Object
[
newSize
];
tmp
=
newArray
;
}
...
...
src/share/classes/java/util/Currency.java
浏览文件 @
3fa1612e
...
...
@@ -404,7 +404,7 @@ public final class Currency implements Serializable {
public
static
Set
<
Currency
>
getAvailableCurrencies
()
{
synchronized
(
Currency
.
class
)
{
if
(
available
==
null
)
{
available
=
new
HashSet
<
Currency
>(
256
);
available
=
new
HashSet
<>(
256
);
// Add simple currencies first
for
(
char
c1
=
'A'
;
c1
<=
'Z'
;
c1
++)
{
...
...
src/share/classes/java/util/EnumMap.java
浏览文件 @
3fa1612e
...
...
@@ -120,11 +120,12 @@ public class EnumMap<K extends Enum<K>, V> extends AbstractMap<K, V>
return
(
value
==
null
?
NULL
:
value
);
}
@SuppressWarnings
(
"unchecked"
)
private
V
unmaskNull
(
Object
value
)
{
return
(
V
)
(
value
==
NULL
?
null
:
value
);
return
(
V
)(
value
==
NULL
?
null
:
value
);
}
private
static
final
Enum
[]
ZERO_LENGTH_ENUM_ARRAY
=
new
Enum
[
0
];
private
static
final
Enum
<?>[]
ZERO_LENGTH_ENUM_ARRAY
=
new
Enum
<?>
[
0
];
/**
* Creates an empty enum map with the specified key type.
...
...
@@ -218,12 +219,12 @@ public class EnumMap<K extends Enum<K>, V> extends AbstractMap<K, V>
* key
*/
public
boolean
containsKey
(
Object
key
)
{
return
isValidKey
(
key
)
&&
vals
[((
Enum
)
key
).
ordinal
()]
!=
null
;
return
isValidKey
(
key
)
&&
vals
[((
Enum
<?>
)
key
).
ordinal
()]
!=
null
;
}
private
boolean
containsMapping
(
Object
key
,
Object
value
)
{
return
isValidKey
(
key
)
&&
maskNull
(
value
).
equals
(
vals
[((
Enum
)
key
).
ordinal
()]);
maskNull
(
value
).
equals
(
vals
[((
Enum
<?>
)
key
).
ordinal
()]);
}
/**
...
...
@@ -243,7 +244,7 @@ public class EnumMap<K extends Enum<K>, V> extends AbstractMap<K, V>
*/
public
V
get
(
Object
key
)
{
return
(
isValidKey
(
key
)
?
unmaskNull
(
vals
[((
Enum
)
key
).
ordinal
()])
:
null
);
unmaskNull
(
vals
[((
Enum
<?>
)
key
).
ordinal
()])
:
null
);
}
// Modification Operations
...
...
@@ -285,7 +286,7 @@ public class EnumMap<K extends Enum<K>, V> extends AbstractMap<K, V>
public
V
remove
(
Object
key
)
{
if
(!
isValidKey
(
key
))
return
null
;
int
index
=
((
Enum
)
key
).
ordinal
();
int
index
=
((
Enum
<?>
)
key
).
ordinal
();
Object
oldValue
=
vals
[
index
];
vals
[
index
]
=
null
;
if
(
oldValue
!=
null
)
...
...
@@ -296,7 +297,7 @@ public class EnumMap<K extends Enum<K>, V> extends AbstractMap<K, V>
private
boolean
removeMapping
(
Object
key
,
Object
value
)
{
if
(!
isValidKey
(
key
))
return
false
;
int
index
=
((
Enum
)
key
).
ordinal
();
int
index
=
((
Enum
<?>
)
key
).
ordinal
();
if
(
maskNull
(
value
).
equals
(
vals
[
index
]))
{
vals
[
index
]
=
null
;
size
--;
...
...
@@ -314,7 +315,7 @@ public class EnumMap<K extends Enum<K>, V> extends AbstractMap<K, V>
return
false
;
// Cheaper than instanceof Enum followed by getDeclaringClass
Class
keyClass
=
key
.
getClass
();
Class
<?>
keyClass
=
key
.
getClass
();
return
keyClass
==
keyType
||
keyClass
.
getSuperclass
()
==
keyType
;
}
...
...
@@ -331,8 +332,7 @@ public class EnumMap<K extends Enum<K>, V> extends AbstractMap<K, V>
*/
public
void
putAll
(
Map
<?
extends
K
,
?
extends
V
>
m
)
{
if
(
m
instanceof
EnumMap
)
{
EnumMap
<?
extends
K
,
?
extends
V
>
em
=
(
EnumMap
<?
extends
K
,
?
extends
V
>)
m
;
EnumMap
<?,
?>
em
=
(
EnumMap
<?,
?>)
m
;
if
(
em
.
keyType
!=
keyType
)
{
if
(
em
.
isEmpty
())
return
;
...
...
@@ -476,13 +476,13 @@ public class EnumMap<K extends Enum<K>, V> extends AbstractMap<K, V>
public
boolean
contains
(
Object
o
)
{
if
(!(
o
instanceof
Map
.
Entry
))
return
false
;
Map
.
Entry
entry
=
(
Map
.
Entry
)
o
;
Map
.
Entry
<?,?>
entry
=
(
Map
.
Entry
<?,?>
)
o
;
return
containsMapping
(
entry
.
getKey
(),
entry
.
getValue
());
}
public
boolean
remove
(
Object
o
)
{
if
(!(
o
instanceof
Map
.
Entry
))
return
false
;
Map
.
Entry
entry
=
(
Map
.
Entry
)
o
;
Map
.
Entry
<?,?>
entry
=
(
Map
.
Entry
<?,?>
)
o
;
return
removeMapping
(
entry
.
getKey
(),
entry
.
getValue
());
}
public
int
size
()
{
...
...
@@ -610,7 +610,7 @@ public class EnumMap<K extends Enum<K>, V> extends AbstractMap<K, V>
if
(!(
o
instanceof
Map
.
Entry
))
return
false
;
Map
.
Entry
e
=
(
Map
.
Entry
)
o
;
Map
.
Entry
<?,?>
e
=
(
Map
.
Entry
<?,?>
)
o
;
V
ourValue
=
unmaskNull
(
vals
[
index
]);
Object
hisValue
=
e
.
getValue
();
return
(
e
.
getKey
()
==
keyUniverse
[
index
]
&&
...
...
@@ -655,11 +655,11 @@ public class EnumMap<K extends Enum<K>, V> extends AbstractMap<K, V>
if
(
this
==
o
)
return
true
;
if
(
o
instanceof
EnumMap
)
return
equals
((
EnumMap
)
o
);
return
equals
((
EnumMap
<?,?>
)
o
);
if
(!(
o
instanceof
Map
))
return
false
;
Map
<
K
,
V
>
m
=
(
Map
<
K
,
V
>)
o
;
Map
<
?,?>
m
=
(
Map
<?,?
>)
o
;
if
(
size
!=
m
.
size
())
return
false
;
...
...
@@ -680,7 +680,7 @@ public class EnumMap<K extends Enum<K>, V> extends AbstractMap<K, V>
return
true
;
}
private
boolean
equals
(
EnumMap
em
)
{
private
boolean
equals
(
EnumMap
<?,?>
em
)
{
if
(
em
.
keyType
!=
keyType
)
return
size
==
0
&&
em
.
size
==
0
;
...
...
@@ -721,6 +721,7 @@ public class EnumMap<K extends Enum<K>, V> extends AbstractMap<K, V>
*
* @return a shallow copy of this enum map
*/
@SuppressWarnings
(
"unchecked"
)
public
EnumMap
<
K
,
V
>
clone
()
{
EnumMap
<
K
,
V
>
result
=
null
;
try
{
...
...
@@ -736,7 +737,7 @@ public class EnumMap<K extends Enum<K>, V> extends AbstractMap<K, V>
* Throws an exception if e is not of the correct type for this enum set.
*/
private
void
typeCheck
(
K
key
)
{
Class
keyClass
=
key
.
getClass
();
Class
<?>
keyClass
=
key
.
getClass
();
if
(
keyClass
!=
keyType
&&
keyClass
.
getSuperclass
()
!=
keyType
)
throw
new
ClassCastException
(
keyClass
+
" != "
+
keyType
);
}
...
...
@@ -785,6 +786,7 @@ public class EnumMap<K extends Enum<K>, V> extends AbstractMap<K, V>
* Reconstitute the <tt>EnumMap</tt> instance from a stream (i.e.,
* deserialize it).
*/
@SuppressWarnings
(
"unchecked"
)
private
void
readObject
(
java
.
io
.
ObjectInputStream
s
)
throws
java
.
io
.
IOException
,
ClassNotFoundException
{
...
...
src/share/classes/java/util/EnumSet.java
浏览文件 @
3fa1612e
...
...
@@ -88,11 +88,11 @@ public abstract class EnumSet<E extends Enum<E>> extends AbstractSet<E>
/**
* All of the values comprising T. (Cached for performance.)
*/
final
Enum
[]
universe
;
final
Enum
<?>
[]
universe
;
private
static
Enum
[]
ZERO_LENGTH_ENUM_ARRAY
=
new
Enum
[
0
];
private
static
Enum
<?>[]
ZERO_LENGTH_ENUM_ARRAY
=
new
Enum
<?>
[
0
];
EnumSet
(
Class
<
E
>
elementType
,
Enum
[]
universe
)
{
EnumSet
(
Class
<
E
>
elementType
,
Enum
<?>
[]
universe
)
{
this
.
elementType
=
elementType
;
this
.
universe
=
universe
;
}
...
...
@@ -105,7 +105,7 @@ public abstract class EnumSet<E extends Enum<E>> extends AbstractSet<E>
* @throws NullPointerException if <tt>elementType</tt> is null
*/
public
static
<
E
extends
Enum
<
E
>>
EnumSet
<
E
>
noneOf
(
Class
<
E
>
elementType
)
{
Enum
[]
universe
=
getUniverse
(
elementType
);
Enum
<?>
[]
universe
=
getUniverse
(
elementType
);
if
(
universe
==
null
)
throw
new
ClassCastException
(
elementType
+
" not an enum"
);
...
...
@@ -358,6 +358,7 @@ public abstract class EnumSet<E extends Enum<E>> extends AbstractSet<E>
*
* @return a copy of this set
*/
@SuppressWarnings
(
"unchecked"
)
public
EnumSet
<
E
>
clone
()
{
try
{
return
(
EnumSet
<
E
>)
super
.
clone
();
...
...
@@ -375,7 +376,7 @@ public abstract class EnumSet<E extends Enum<E>> extends AbstractSet<E>
* Throws an exception if e is not of the correct type for this enum set.
*/
final
void
typeCheck
(
E
e
)
{
Class
eClass
=
e
.
getClass
();
Class
<?>
eClass
=
e
.
getClass
();
if
(
eClass
!=
elementType
&&
eClass
.
getSuperclass
()
!=
elementType
)
throw
new
ClassCastException
(
eClass
+
" != "
+
elementType
);
}
...
...
@@ -413,16 +414,19 @@ public abstract class EnumSet<E extends Enum<E>> extends AbstractSet<E>
*
* @serial
*/
private
final
Enum
[]
elements
;
private
final
Enum
<?>
[]
elements
;
SerializationProxy
(
EnumSet
<
E
>
set
)
{
elementType
=
set
.
elementType
;
elements
=
set
.
toArray
(
ZERO_LENGTH_ENUM_ARRAY
);
}
// instead of cast to E, we should perhaps use elementType.cast()
// to avoid injection of forged stream, but it will slow the implementation
@SuppressWarnings
(
"unchecked"
)
private
Object
readResolve
()
{
EnumSet
<
E
>
result
=
EnumSet
.
noneOf
(
elementType
);
for
(
Enum
e
:
elements
)
for
(
Enum
<?>
e
:
elements
)
result
.
add
((
E
)
e
);
return
result
;
}
...
...
src/share/classes/java/util/HashMap.java
浏览文件 @
3fa1612e
...
...
@@ -146,7 +146,7 @@ public class HashMap<K,V>
/**
* The table, resized as necessary. Length MUST Always be a power of two.
*/
transient
Entry
[]
table
;
transient
Entry
<?,?>
[]
table
;
/**
* The number of key-value mappings contained in this map.
...
...
@@ -311,16 +311,17 @@ public class HashMap<K,V>
*
* @see #put(Object, Object)
*/
@SuppressWarnings
(
"unchecked"
)
public
V
get
(
Object
key
)
{
if
(
key
==
null
)
return
getForNullKey
();
return
(
V
)
getForNullKey
();
int
hash
=
hash
(
key
.
hashCode
());
for
(
Entry
<
K
,
V
>
e
=
table
[
indexFor
(
hash
,
table
.
length
)];
for
(
Entry
<
?,?
>
e
=
table
[
indexFor
(
hash
,
table
.
length
)];
e
!=
null
;
e
=
e
.
next
)
{
Object
k
;
if
(
e
.
hash
==
hash
&&
((
k
=
e
.
key
)
==
key
||
key
.
equals
(
k
)))
return
e
.
value
;
return
(
V
)
e
.
value
;
}
return
null
;
}
...
...
@@ -332,8 +333,8 @@ public class HashMap<K,V>
* operations (get and put), but incorporated with conditionals in
* others.
*/
private
V
getForNullKey
()
{
for
(
Entry
<
K
,
V
>
e
=
table
[
0
];
e
!=
null
;
e
=
e
.
next
)
{
private
Object
getForNullKey
()
{
for
(
Entry
<
?,?
>
e
=
table
[
0
];
e
!=
null
;
e
=
e
.
next
)
{
if
(
e
.
key
==
null
)
return
e
.
value
;
}
...
...
@@ -357,15 +358,16 @@ public class HashMap<K,V>
* HashMap. Returns null if the HashMap contains no mapping
* for the key.
*/
@SuppressWarnings
(
"unchecked"
)
final
Entry
<
K
,
V
>
getEntry
(
Object
key
)
{
int
hash
=
(
key
==
null
)
?
0
:
hash
(
key
.
hashCode
());
for
(
Entry
<
K
,
V
>
e
=
table
[
indexFor
(
hash
,
table
.
length
)];
for
(
Entry
<
?,?
>
e
=
table
[
indexFor
(
hash
,
table
.
length
)];
e
!=
null
;
e
=
e
.
next
)
{
Object
k
;
if
(
e
.
hash
==
hash
&&
((
k
=
e
.
key
)
==
key
||
(
key
!=
null
&&
key
.
equals
(
k
))))
return
e
;
return
(
Entry
<
K
,
V
>)
e
;
}
return
null
;
}
...
...
@@ -388,7 +390,9 @@ public class HashMap<K,V>
return
putForNullKey
(
value
);
int
hash
=
hash
(
key
.
hashCode
());
int
i
=
indexFor
(
hash
,
table
.
length
);
for
(
Entry
<
K
,
V
>
e
=
table
[
i
];
e
!=
null
;
e
=
e
.
next
)
{
@SuppressWarnings
(
"unchecked"
)
Entry
<
K
,
V
>
e
=
(
Entry
<
K
,
V
>)
table
[
i
];
for
(;
e
!=
null
;
e
=
e
.
next
)
{
Object
k
;
if
(
e
.
hash
==
hash
&&
((
k
=
e
.
key
)
==
key
||
key
.
equals
(
k
)))
{
V
oldValue
=
e
.
value
;
...
...
@@ -407,7 +411,9 @@ public class HashMap<K,V>
* Offloaded version of put for null keys
*/
private
V
putForNullKey
(
V
value
)
{
for
(
Entry
<
K
,
V
>
e
=
table
[
0
];
e
!=
null
;
e
=
e
.
next
)
{
@SuppressWarnings
(
"unchecked"
)
Entry
<
K
,
V
>
e
=
(
Entry
<
K
,
V
>)
table
[
0
];
for
(;
e
!=
null
;
e
=
e
.
next
)
{
if
(
e
.
key
==
null
)
{
V
oldValue
=
e
.
value
;
e
.
value
=
value
;
...
...
@@ -435,7 +441,8 @@ public class HashMap<K,V>
* clone or deserialize. It will only happen for construction if the
* input Map is a sorted map whose ordering is inconsistent w/ equals.
*/
for
(
Entry
<
K
,
V
>
e
=
table
[
i
];
e
!=
null
;
e
=
e
.
next
)
{
for
(
@SuppressWarnings
(
"unchecked"
)
Entry
<?,
V
>
e
=
(
Entry
<?,
V
>)
table
[
i
];
e
!=
null
;
e
=
e
.
next
)
{
Object
k
;
if
(
e
.
hash
==
hash
&&
((
k
=
e
.
key
)
==
key
||
(
key
!=
null
&&
key
.
equals
(
k
))))
{
...
...
@@ -467,14 +474,14 @@ public class HashMap<K,V>
* is irrelevant).
*/
void
resize
(
int
newCapacity
)
{
Entry
[]
oldTable
=
table
;
Entry
<?,?>
[]
oldTable
=
table
;
int
oldCapacity
=
oldTable
.
length
;
if
(
oldCapacity
==
MAXIMUM_CAPACITY
)
{
threshold
=
Integer
.
MAX_VALUE
;
return
;
}
Entry
[]
newTable
=
new
Entry
[
newCapacity
];
Entry
<?,?>[]
newTable
=
new
Entry
<?,?>
[
newCapacity
];
transfer
(
newTable
);
table
=
newTable
;
threshold
=
(
int
)(
newCapacity
*
loadFactor
);
...
...
@@ -483,17 +490,18 @@ public class HashMap<K,V>
/**
* Transfers all entries from current table to newTable.
*/
void
transfer
(
Entry
[]
newTable
)
{
Entry
[]
src
=
table
;
@SuppressWarnings
(
"unchecked"
)
void
transfer
(
Entry
<?,?>[]
newTable
)
{
Entry
<?,?>[]
src
=
table
;
int
newCapacity
=
newTable
.
length
;
for
(
int
j
=
0
;
j
<
src
.
length
;
j
++)
{
Entry
<
K
,
V
>
e
=
src
[
j
];
Entry
<
K
,
V
>
e
=
(
Entry
<
K
,
V
>)
src
[
j
];
if
(
e
!=
null
)
{
src
[
j
]
=
null
;
do
{
Entry
<
K
,
V
>
next
=
e
.
next
;
int
i
=
indexFor
(
e
.
hash
,
newCapacity
);
e
.
next
=
newTable
[
i
];
e
.
next
=
(
Entry
<
K
,
V
>)
newTable
[
i
];
newTable
[
i
]
=
e
;
e
=
next
;
}
while
(
e
!=
null
);
...
...
@@ -560,7 +568,8 @@ public class HashMap<K,V>
final
Entry
<
K
,
V
>
removeEntryForKey
(
Object
key
)
{
int
hash
=
(
key
==
null
)
?
0
:
hash
(
key
.
hashCode
());
int
i
=
indexFor
(
hash
,
table
.
length
);
Entry
<
K
,
V
>
prev
=
table
[
i
];
@SuppressWarnings
(
"unchecked"
)
Entry
<
K
,
V
>
prev
=
(
Entry
<
K
,
V
>)
table
[
i
];
Entry
<
K
,
V
>
e
=
prev
;
while
(
e
!=
null
)
{
...
...
@@ -591,11 +600,12 @@ public class HashMap<K,V>
if
(!(
o
instanceof
Map
.
Entry
))
return
null
;
Map
.
Entry
<
K
,
V
>
entry
=
(
Map
.
Entry
<
K
,
V
>)
o
;
Map
.
Entry
<
?,?>
entry
=
(
Map
.
Entry
<?,?
>)
o
;
Object
key
=
entry
.
getKey
();
int
hash
=
(
key
==
null
)
?
0
:
hash
(
key
.
hashCode
());
int
i
=
indexFor
(
hash
,
table
.
length
);
Entry
<
K
,
V
>
prev
=
table
[
i
];
@SuppressWarnings
(
"unchecked"
)
Entry
<
K
,
V
>
prev
=
(
Entry
<
K
,
V
>)
table
[
i
];
Entry
<
K
,
V
>
e
=
prev
;
while
(
e
!=
null
)
{
...
...
@@ -623,7 +633,7 @@ public class HashMap<K,V>
*/
public
void
clear
()
{
modCount
++;
Entry
[]
tab
=
table
;
Entry
<?,?>
[]
tab
=
table
;
for
(
int
i
=
0
;
i
<
tab
.
length
;
i
++)
tab
[
i
]
=
null
;
size
=
0
;
...
...
@@ -641,9 +651,9 @@ public class HashMap<K,V>
if
(
value
==
null
)
return
containsNullValue
();
Entry
[]
tab
=
table
;
Entry
<?,?>
[]
tab
=
table
;
for
(
int
i
=
0
;
i
<
tab
.
length
;
i
++)
for
(
Entry
e
=
tab
[
i
]
;
e
!=
null
;
e
=
e
.
next
)
for
(
Entry
<?,?>
e
=
tab
[
i
]
;
e
!=
null
;
e
=
e
.
next
)
if
(
value
.
equals
(
e
.
value
))
return
true
;
return
false
;
...
...
@@ -653,9 +663,9 @@ public class HashMap<K,V>
* Special-case code for containsValue with null argument
*/
private
boolean
containsNullValue
()
{
Entry
[]
tab
=
table
;
Entry
<?,?>
[]
tab
=
table
;
for
(
int
i
=
0
;
i
<
tab
.
length
;
i
++)
for
(
Entry
e
=
tab
[
i
]
;
e
!=
null
;
e
=
e
.
next
)
for
(
Entry
<?,?>
e
=
tab
[
i
]
;
e
!=
null
;
e
=
e
.
next
)
if
(
e
.
value
==
null
)
return
true
;
return
false
;
...
...
@@ -667,6 +677,7 @@ public class HashMap<K,V>
*
* @return a shallow copy of this map
*/
@SuppressWarnings
(
"unchecked"
)
public
Object
clone
()
{
HashMap
<
K
,
V
>
result
=
null
;
try
{
...
...
@@ -674,7 +685,7 @@ public class HashMap<K,V>
}
catch
(
CloneNotSupportedException
e
)
{
// assert false;
}
result
.
table
=
new
Entry
[
table
.
length
];
result
.
table
=
new
Entry
<?,?>
[
table
.
length
];
result
.
entrySet
=
null
;
result
.
modCount
=
0
;
result
.
size
=
0
;
...
...
@@ -717,7 +728,7 @@ public class HashMap<K,V>
public
final
boolean
equals
(
Object
o
)
{
if
(!(
o
instanceof
Map
.
Entry
))
return
false
;
Map
.
Entry
e
=
(
Map
.
Entry
)
o
;
Map
.
Entry
<?,?>
e
=
(
Map
.
Entry
<?,?>
)
o
;
Object
k1
=
getKey
();
Object
k2
=
e
.
getKey
();
if
(
k1
==
k2
||
(
k1
!=
null
&&
k1
.
equals
(
k2
)))
{
...
...
@@ -762,7 +773,8 @@ public class HashMap<K,V>
* Subclass overrides this to alter the behavior of put method.
*/
void
addEntry
(
int
hash
,
K
key
,
V
value
,
int
bucketIndex
)
{
Entry
<
K
,
V
>
e
=
table
[
bucketIndex
];
@SuppressWarnings
(
"unchecked"
)
Entry
<
K
,
V
>
e
=
(
Entry
<
K
,
V
>)
table
[
bucketIndex
];
table
[
bucketIndex
]
=
new
Entry
<>(
hash
,
key
,
value
,
e
);
if
(
size
++
>=
threshold
)
resize
(
2
*
table
.
length
);
...
...
@@ -777,21 +789,22 @@ public class HashMap<K,V>
* clone, and readObject.
*/
void
createEntry
(
int
hash
,
K
key
,
V
value
,
int
bucketIndex
)
{
Entry
<
K
,
V
>
e
=
table
[
bucketIndex
];
@SuppressWarnings
(
"unchecked"
)
Entry
<
K
,
V
>
e
=
(
Entry
<
K
,
V
>)
table
[
bucketIndex
];
table
[
bucketIndex
]
=
new
Entry
<>(
hash
,
key
,
value
,
e
);
size
++;
}
private
abstract
class
HashIterator
<
E
>
implements
Iterator
<
E
>
{
Entry
<
K
,
V
>
next
;
// next entry to return
Entry
<
?,?
>
next
;
// next entry to return
int
expectedModCount
;
// For fast-fail
int
index
;
// current slot
Entry
<
K
,
V
>
current
;
// current entry
Entry
<
?,?
>
current
;
// current entry
HashIterator
()
{
expectedModCount
=
modCount
;
if
(
size
>
0
)
{
// advance to first entry
Entry
[]
t
=
table
;
Entry
<?,?>
[]
t
=
table
;
while
(
index
<
t
.
length
&&
(
next
=
t
[
index
++])
==
null
)
;
}
...
...
@@ -801,20 +814,21 @@ public class HashMap<K,V>
return
next
!=
null
;
}
@SuppressWarnings
(
"unchecked"
)
final
Entry
<
K
,
V
>
nextEntry
()
{
if
(
modCount
!=
expectedModCount
)
throw
new
ConcurrentModificationException
();
Entry
<
K
,
V
>
e
=
next
;
Entry
<
?,?
>
e
=
next
;
if
(
e
==
null
)
throw
new
NoSuchElementException
();
if
((
next
=
e
.
next
)
==
null
)
{
Entry
[]
t
=
table
;
Entry
<?,?>
[]
t
=
table
;
while
(
index
<
t
.
length
&&
(
next
=
t
[
index
++])
==
null
)
;
}
current
=
e
;
return
e
;
return
(
Entry
<
K
,
V
>)
e
;
}
public
void
remove
()
{
...
...
@@ -965,7 +979,7 @@ public class HashMap<K,V>
public
boolean
contains
(
Object
o
)
{
if
(!(
o
instanceof
Map
.
Entry
))
return
false
;
Map
.
Entry
<
K
,
V
>
e
=
(
Map
.
Entry
<
K
,
V
>)
o
;
Map
.
Entry
<
?,?>
e
=
(
Map
.
Entry
<?,?
>)
o
;
Entry
<
K
,
V
>
candidate
=
getEntry
(
e
.
getKey
());
return
candidate
!=
null
&&
candidate
.
equals
(
e
);
}
...
...
@@ -1039,8 +1053,10 @@ public class HashMap<K,V>
// Read the keys and values, and put the mappings in the HashMap
for
(
int
i
=
0
;
i
<
size
;
i
++)
{
K
key
=
(
K
)
s
.
readObject
();
V
value
=
(
V
)
s
.
readObject
();
@SuppressWarnings
(
"unchecked"
)
K
key
=
(
K
)
s
.
readObject
();
@SuppressWarnings
(
"unchecked"
)
V
value
=
(
V
)
s
.
readObject
();
putForCreate
(
key
,
value
);
}
}
...
...
src/share/classes/java/util/HashSet.java
浏览文件 @
3fa1612e
...
...
@@ -247,6 +247,7 @@ public class HashSet<E>
*
* @return a shallow copy of this set
*/
@SuppressWarnings
(
"unchecked"
)
public
Object
clone
()
{
try
{
HashSet
<
E
>
newSet
=
(
HashSet
<
E
>)
super
.
clone
();
...
...
@@ -296,7 +297,7 @@ public class HashSet<E>
// Read in HashMap capacity and load factor and create backing HashMap
int
capacity
=
s
.
readInt
();
float
loadFactor
=
s
.
readFloat
();
map
=
(((
HashSet
)
this
)
instanceof
LinkedHashSet
?
map
=
(((
HashSet
<?>
)
this
)
instanceof
LinkedHashSet
?
new
LinkedHashMap
<
E
,
Object
>(
capacity
,
loadFactor
)
:
new
HashMap
<
E
,
Object
>(
capacity
,
loadFactor
));
...
...
@@ -305,7 +306,8 @@ public class HashSet<E>
// Read in all elements in the proper order.
for
(
int
i
=
0
;
i
<
size
;
i
++)
{
E
e
=
(
E
)
s
.
readObject
();
@SuppressWarnings
(
"unchecked"
)
E
e
=
(
E
)
s
.
readObject
();
map
.
put
(
e
,
PRESENT
);
}
}
...
...
src/share/classes/java/util/Hashtable.java
浏览文件 @
3fa1612e
...
...
@@ -129,7 +129,7 @@ public class Hashtable<K,V>
/**
* The hash table data.
*/
private
transient
Entry
[]
table
;
private
transient
Entry
<?,?>
[]
table
;
/**
* The total number of entries in the hash table.
...
...
@@ -182,7 +182,7 @@ public class Hashtable<K,V>
if
(
initialCapacity
==
0
)
initialCapacity
=
1
;
this
.
loadFactor
=
loadFactor
;
table
=
new
Entry
[
initialCapacity
];
table
=
new
Entry
<?,?>
[
initialCapacity
];
threshold
=
(
int
)(
initialCapacity
*
loadFactor
);
}
...
...
@@ -288,9 +288,9 @@ public class Hashtable<K,V>
throw
new
NullPointerException
();
}
Entry
tab
[]
=
table
;
Entry
<?,?>
tab
[]
=
table
;
for
(
int
i
=
tab
.
length
;
i
--
>
0
;)
{
for
(
Entry
<
K
,
V
>
e
=
tab
[
i
]
;
e
!=
null
;
e
=
e
.
next
)
{
for
(
Entry
<
?,?
>
e
=
tab
[
i
]
;
e
!=
null
;
e
=
e
.
next
)
{
if
(
e
.
value
.
equals
(
value
))
{
return
true
;
}
...
...
@@ -326,10 +326,10 @@ public class Hashtable<K,V>
* @see #contains(Object)
*/
public
synchronized
boolean
containsKey
(
Object
key
)
{
Entry
tab
[]
=
table
;
Entry
<?,?>
tab
[]
=
table
;
int
hash
=
key
.
hashCode
();
int
index
=
(
hash
&
0x7FFFFFFF
)
%
tab
.
length
;
for
(
Entry
<
K
,
V
>
e
=
tab
[
index
]
;
e
!=
null
;
e
=
e
.
next
)
{
for
(
Entry
<
?,?
>
e
=
tab
[
index
]
;
e
!=
null
;
e
=
e
.
next
)
{
if
((
e
.
hash
==
hash
)
&&
e
.
key
.
equals
(
key
))
{
return
true
;
}
...
...
@@ -352,13 +352,14 @@ public class Hashtable<K,V>
* @throws NullPointerException if the specified key is null
* @see #put(Object, Object)
*/
@SuppressWarnings
(
"unchecked"
)
public
synchronized
V
get
(
Object
key
)
{
Entry
tab
[]
=
table
;
Entry
<?,?>
tab
[]
=
table
;
int
hash
=
key
.
hashCode
();
int
index
=
(
hash
&
0x7FFFFFFF
)
%
tab
.
length
;
for
(
Entry
<
K
,
V
>
e
=
tab
[
index
]
;
e
!=
null
;
e
=
e
.
next
)
{
for
(
Entry
<
?,?
>
e
=
tab
[
index
]
;
e
!=
null
;
e
=
e
.
next
)
{
if
((
e
.
hash
==
hash
)
&&
e
.
key
.
equals
(
key
))
{
return
e
.
value
;
return
(
V
)
e
.
value
;
}
}
return
null
;
...
...
@@ -379,9 +380,10 @@ public class Hashtable<K,V>
* number of keys in the hashtable exceeds this hashtable's capacity
* and load factor.
*/
@SuppressWarnings
(
"unchecked"
)
protected
void
rehash
()
{
int
oldCapacity
=
table
.
length
;
Entry
[]
oldMap
=
table
;
Entry
<?,?>
[]
oldMap
=
table
;
// overflow-conscious code
int
newCapacity
=
(
oldCapacity
<<
1
)
+
1
;
...
...
@@ -391,19 +393,19 @@ public class Hashtable<K,V>
return
;
newCapacity
=
MAX_ARRAY_SIZE
;
}
Entry
[]
newMap
=
new
Entry
[
newCapacity
];
Entry
<?,?>[]
newMap
=
new
Entry
<?,?>
[
newCapacity
];
modCount
++;
threshold
=
(
int
)(
newCapacity
*
loadFactor
);
table
=
newMap
;
for
(
int
i
=
oldCapacity
;
i
--
>
0
;)
{
for
(
Entry
<
K
,
V
>
old
=
oldMap
[
i
]
;
old
!=
null
;
)
{
for
(
Entry
<
K
,
V
>
old
=
(
Entry
<
K
,
V
>)
oldMap
[
i
]
;
old
!=
null
;
)
{
Entry
<
K
,
V
>
e
=
old
;
old
=
old
.
next
;
int
index
=
(
e
.
hash
&
0x7FFFFFFF
)
%
newCapacity
;
e
.
next
=
newMap
[
index
];
e
.
next
=
(
Entry
<
K
,
V
>)
newMap
[
index
];
newMap
[
index
]
=
e
;
}
}
...
...
@@ -433,13 +435,15 @@ public class Hashtable<K,V>
}
// Makes sure the key is not already in the hashtable.
Entry
tab
[]
=
table
;
Entry
<?,?>
tab
[]
=
table
;
int
hash
=
key
.
hashCode
();
int
index
=
(
hash
&
0x7FFFFFFF
)
%
tab
.
length
;
for
(
Entry
<
K
,
V
>
e
=
tab
[
index
]
;
e
!=
null
;
e
=
e
.
next
)
{
if
((
e
.
hash
==
hash
)
&&
e
.
key
.
equals
(
key
))
{
V
old
=
e
.
value
;
e
.
value
=
value
;
@SuppressWarnings
(
"unchecked"
)
Entry
<
K
,
V
>
entry
=
(
Entry
<
K
,
V
>)
tab
[
index
];
for
(;
entry
!=
null
;
entry
=
entry
.
next
)
{
if
((
entry
.
hash
==
hash
)
&&
entry
.
key
.
equals
(
key
))
{
V
old
=
entry
.
value
;
entry
.
value
=
value
;
return
old
;
}
}
...
...
@@ -454,7 +458,8 @@ public class Hashtable<K,V>
}
// Creates the new entry.
Entry
<
K
,
V
>
e
=
tab
[
index
];
@SuppressWarnings
(
"unchecked"
)
Entry
<
K
,
V
>
e
=
(
Entry
<
K
,
V
>)
tab
[
index
];
tab
[
index
]
=
new
Entry
<>(
hash
,
key
,
value
,
e
);
count
++;
return
null
;
...
...
@@ -470,10 +475,12 @@ public class Hashtable<K,V>
* @throws NullPointerException if the key is <code>null</code>
*/
public
synchronized
V
remove
(
Object
key
)
{
Entry
tab
[]
=
table
;
Entry
<?,?>
tab
[]
=
table
;
int
hash
=
key
.
hashCode
();
int
index
=
(
hash
&
0x7FFFFFFF
)
%
tab
.
length
;
for
(
Entry
<
K
,
V
>
e
=
tab
[
index
],
prev
=
null
;
e
!=
null
;
prev
=
e
,
e
=
e
.
next
)
{
@SuppressWarnings
(
"unchecked"
)
Entry
<
K
,
V
>
e
=
(
Entry
<
K
,
V
>)
tab
[
index
];
for
(
Entry
<
K
,
V
>
prev
=
null
;
e
!=
null
;
prev
=
e
,
e
=
e
.
next
)
{
if
((
e
.
hash
==
hash
)
&&
e
.
key
.
equals
(
key
))
{
modCount
++;
if
(
prev
!=
null
)
{
...
...
@@ -508,7 +515,7 @@ public class Hashtable<K,V>
* Clears this hashtable so that it contains no keys.
*/
public
synchronized
void
clear
()
{
Entry
tab
[]
=
table
;
Entry
<?,?>
tab
[]
=
table
;
modCount
++;
for
(
int
index
=
tab
.
length
;
--
index
>=
0
;
)
tab
[
index
]
=
null
;
...
...
@@ -524,11 +531,11 @@ public class Hashtable<K,V>
*/
public
synchronized
Object
clone
()
{
try
{
Hashtable
<
K
,
V
>
t
=
(
Hashtable
<
K
,
V
>)
super
.
clone
();
t
.
table
=
new
Entry
[
table
.
length
];
Hashtable
<
?,?>
t
=
(
Hashtable
<?,?>)
super
.
clone
();
t
.
table
=
new
Entry
<?,?>
[
table
.
length
];
for
(
int
i
=
table
.
length
;
i
--
>
0
;
)
{
t
.
table
[
i
]
=
(
table
[
i
]
!=
null
)
?
(
Entry
<
K
,
V
>)
table
[
i
].
clone
()
:
null
;
?
(
Entry
<
?,?
>)
table
[
i
].
clone
()
:
null
;
}
t
.
keySet
=
null
;
t
.
entrySet
=
null
;
...
...
@@ -675,13 +682,13 @@ public class Hashtable<K,V>
public
boolean
contains
(
Object
o
)
{
if
(!(
o
instanceof
Map
.
Entry
))
return
false
;
Map
.
Entry
entry
=
(
Map
.
Entry
)
o
;
Map
.
Entry
<?,?>
entry
=
(
Map
.
Entry
<?,?>
)
o
;
Object
key
=
entry
.
getKey
();
Entry
[]
tab
=
table
;
Entry
<?,?>
[]
tab
=
table
;
int
hash
=
key
.
hashCode
();
int
index
=
(
hash
&
0x7FFFFFFF
)
%
tab
.
length
;
for
(
Entry
e
=
tab
[
index
];
e
!=
null
;
e
=
e
.
next
)
for
(
Entry
<?,?>
e
=
tab
[
index
];
e
!=
null
;
e
=
e
.
next
)
if
(
e
.
hash
==
hash
&&
e
.
equals
(
entry
))
return
true
;
return
false
;
...
...
@@ -690,14 +697,15 @@ public class Hashtable<K,V>
public
boolean
remove
(
Object
o
)
{
if
(!(
o
instanceof
Map
.
Entry
))
return
false
;
Map
.
Entry
<
K
,
V
>
entry
=
(
Map
.
Entry
<
K
,
V
>)
o
;
K
key
=
entry
.
getKey
();
Entry
[]
tab
=
table
;
Map
.
Entry
<
?,?>
entry
=
(
Map
.
Entry
<?,?
>)
o
;
Object
key
=
entry
.
getKey
();
Entry
<?,?>
[]
tab
=
table
;
int
hash
=
key
.
hashCode
();
int
index
=
(
hash
&
0x7FFFFFFF
)
%
tab
.
length
;
for
(
Entry
<
K
,
V
>
e
=
tab
[
index
],
prev
=
null
;
e
!=
null
;
prev
=
e
,
e
=
e
.
next
)
{
@SuppressWarnings
(
"unchecked"
)
Entry
<
K
,
V
>
e
=
(
Entry
<
K
,
V
>)
tab
[
index
];
for
(
Entry
<
K
,
V
>
prev
=
null
;
e
!=
null
;
prev
=
e
,
e
=
e
.
next
)
{
if
(
e
.
hash
==
hash
&&
e
.
equals
(
entry
))
{
modCount
++;
if
(
prev
!=
null
)
...
...
@@ -776,7 +784,7 @@ public class Hashtable<K,V>
if
(!(
o
instanceof
Map
))
return
false
;
Map
<
K
,
V
>
t
=
(
Map
<
K
,
V
>)
o
;
Map
<
?,?>
t
=
(
Map
<?,?
>)
o
;
if
(
t
.
size
()
!=
size
())
return
false
;
...
...
@@ -826,9 +834,9 @@ public class Hashtable<K,V>
return
h
;
// Returns zero
loadFactor
=
-
loadFactor
;
// Mark hashCode computation in progress
Entry
[]
tab
=
table
;
Entry
<?,?>
[]
tab
=
table
;
for
(
int
i
=
0
;
i
<
tab
.
length
;
i
++)
for
(
Entry
e
=
tab
[
i
];
e
!=
null
;
e
=
e
.
next
)
for
(
Entry
<?,?>
e
=
tab
[
i
];
e
!=
null
;
e
=
e
.
next
)
h
+=
e
.
key
.
hashCode
()
^
e
.
value
.
hashCode
();
loadFactor
=
-
loadFactor
;
// Mark hashCode computation complete
...
...
@@ -859,7 +867,7 @@ public class Hashtable<K,V>
// Stack copies of the entries in the table
for
(
int
index
=
0
;
index
<
table
.
length
;
index
++)
{
Entry
entry
=
table
[
index
];
Entry
<?,?>
entry
=
table
[
index
];
while
(
entry
!=
null
)
{
entryStack
=
...
...
@@ -899,14 +907,15 @@ public class Hashtable<K,V>
length
--;
if
(
origlength
>
0
&&
length
>
origlength
)
length
=
origlength
;
Entry
[]
table
=
new
Entry
[
length
];
Entry
<?,?>[]
table
=
new
Entry
<?,?>[
length
];
count
=
0
;
// Read the number of elements and then all the key/value objects
for
(;
elements
>
0
;
elements
--)
{
K
key
=
(
K
)
s
.
readObject
();
V
value
=
(
V
)
s
.
readObject
();
@SuppressWarnings
(
"unchecked"
)
K
key
=
(
K
)
s
.
readObject
();
@SuppressWarnings
(
"unchecked"
)
V
value
=
(
V
)
s
.
readObject
();
// synch could be eliminated for performance
reconstitutionPut
(
table
,
key
,
value
);
}
...
...
@@ -924,7 +933,7 @@ public class Hashtable<K,V>
* because we are creating a new instance. Also, no return value
* is needed.
*/
private
void
reconstitutionPut
(
Entry
[]
tab
,
K
key
,
V
value
)
private
void
reconstitutionPut
(
Entry
<?,?>
[]
tab
,
K
key
,
V
value
)
throws
StreamCorruptedException
{
if
(
value
==
null
)
{
...
...
@@ -934,13 +943,14 @@ public class Hashtable<K,V>
// This should not happen in deserialized version.
int
hash
=
key
.
hashCode
();
int
index
=
(
hash
&
0x7FFFFFFF
)
%
tab
.
length
;
for
(
Entry
<
K
,
V
>
e
=
tab
[
index
]
;
e
!=
null
;
e
=
e
.
next
)
{
for
(
Entry
<
?,?
>
e
=
tab
[
index
]
;
e
!=
null
;
e
=
e
.
next
)
{
if
((
e
.
hash
==
hash
)
&&
e
.
key
.
equals
(
key
))
{
throw
new
java
.
io
.
StreamCorruptedException
();
}
}
// Creates the new entry.
Entry
<
K
,
V
>
e
=
tab
[
index
];
@SuppressWarnings
(
"unchecked"
)
Entry
<
K
,
V
>
e
=
(
Entry
<
K
,
V
>)
tab
[
index
];
tab
[
index
]
=
new
Entry
<>(
hash
,
key
,
value
,
e
);
count
++;
}
...
...
@@ -961,6 +971,7 @@ public class Hashtable<K,V>
this
.
next
=
next
;
}
@SuppressWarnings
(
"unchecked"
)
protected
Object
clone
()
{
return
new
Entry
<>(
hash
,
key
,
value
,
(
next
==
null
?
null
:
(
Entry
<
K
,
V
>)
next
.
clone
()));
...
...
@@ -988,7 +999,7 @@ public class Hashtable<K,V>
public
boolean
equals
(
Object
o
)
{
if
(!(
o
instanceof
Map
.
Entry
))
return
false
;
Map
.
Entry
e
=
(
Map
.
Entry
)
o
;
Map
.
Entry
<?,?>
e
=
(
Map
.
Entry
<?,?>
)
o
;
return
(
key
==
null
?
e
.
getKey
()==
null
:
key
.
equals
(
e
.
getKey
()))
&&
(
value
==
null
?
e
.
getValue
()==
null
:
value
.
equals
(
e
.
getValue
()));
...
...
@@ -1016,10 +1027,10 @@ public class Hashtable<K,V>
* by passing an Enumeration.
*/
private
class
Enumerator
<
T
>
implements
Enumeration
<
T
>,
Iterator
<
T
>
{
Entry
[]
table
=
Hashtable
.
this
.
table
;
Entry
<?,?>
[]
table
=
Hashtable
.
this
.
table
;
int
index
=
table
.
length
;
Entry
<
K
,
V
>
entry
=
null
;
Entry
<
K
,
V
>
lastReturned
=
null
;
Entry
<
?,?
>
entry
=
null
;
Entry
<
?,?
>
lastReturned
=
null
;
int
type
;
/**
...
...
@@ -1041,9 +1052,9 @@ public class Hashtable<K,V>
}
public
boolean
hasMoreElements
()
{
Entry
<
K
,
V
>
e
=
entry
;
Entry
<
?,?
>
e
=
entry
;
int
i
=
index
;
Entry
[]
t
=
table
;
Entry
<?,?>
[]
t
=
table
;
/* Use locals for faster loop iteration */
while
(
e
==
null
&&
i
>
0
)
{
e
=
t
[--
i
];
...
...
@@ -1053,10 +1064,11 @@ public class Hashtable<K,V>
return
e
!=
null
;
}
@SuppressWarnings
(
"unchecked"
)
public
T
nextElement
()
{
Entry
<
K
,
V
>
et
=
entry
;
Entry
<
?,?
>
et
=
entry
;
int
i
=
index
;
Entry
[]
t
=
table
;
Entry
<?,?>
[]
t
=
table
;
/* Use locals for faster loop iteration */
while
(
et
==
null
&&
i
>
0
)
{
et
=
t
[--
i
];
...
...
@@ -1064,7 +1076,7 @@ public class Hashtable<K,V>
entry
=
et
;
index
=
i
;
if
(
et
!=
null
)
{
Entry
<
K
,
V
>
e
=
lastReturned
=
entry
;
Entry
<
?,?
>
e
=
lastReturned
=
entry
;
entry
=
e
.
next
;
return
type
==
KEYS
?
(
T
)
e
.
key
:
(
type
==
VALUES
?
(
T
)
e
.
value
:
(
T
)
e
);
}
...
...
@@ -1091,11 +1103,12 @@ public class Hashtable<K,V>
throw
new
ConcurrentModificationException
();
synchronized
(
Hashtable
.
this
)
{
Entry
[]
tab
=
Hashtable
.
this
.
table
;
Entry
<?,?>
[]
tab
=
Hashtable
.
this
.
table
;
int
index
=
(
lastReturned
.
hash
&
0x7FFFFFFF
)
%
tab
.
length
;
for
(
Entry
<
K
,
V
>
e
=
tab
[
index
],
prev
=
null
;
e
!=
null
;
prev
=
e
,
e
=
e
.
next
)
{
@SuppressWarnings
(
"unchecked"
)
Entry
<
K
,
V
>
e
=
(
Entry
<
K
,
V
>)
tab
[
index
];
for
(
Entry
<
K
,
V
>
prev
=
null
;
e
!=
null
;
prev
=
e
,
e
=
e
.
next
)
{
if
(
e
==
lastReturned
)
{
modCount
++;
expectedModCount
++;
...
...
src/share/classes/java/util/IdentityHashMap.java
浏览文件 @
3fa1612e
...
...
@@ -327,6 +327,7 @@ public class IdentityHashMap<K,V>
*
* @see #put(Object, Object)
*/
@SuppressWarnings
(
"unchecked"
)
public
V
get
(
Object
key
)
{
Object
k
=
maskNull
(
key
);
Object
[]
tab
=
table
;
...
...
@@ -431,7 +432,8 @@ public class IdentityHashMap<K,V>
Object
item
;
while
(
(
item
=
tab
[
i
])
!=
null
)
{
if
(
item
==
k
)
{
V
oldValue
=
(
V
)
tab
[
i
+
1
];
@SuppressWarnings
(
"unchecked"
)
V
oldValue
=
(
V
)
tab
[
i
+
1
];
tab
[
i
+
1
]
=
value
;
return
oldValue
;
}
...
...
@@ -524,7 +526,8 @@ public class IdentityHashMap<K,V>
if
(
item
==
k
)
{
modCount
++;
size
--;
V
oldValue
=
(
V
)
tab
[
i
+
1
];
@SuppressWarnings
(
"unchecked"
)
V
oldValue
=
(
V
)
tab
[
i
+
1
];
tab
[
i
+
1
]
=
null
;
tab
[
i
]
=
null
;
closeDeletion
(
i
);
...
...
@@ -638,7 +641,7 @@ public class IdentityHashMap<K,V>
if
(
o
==
this
)
{
return
true
;
}
else
if
(
o
instanceof
IdentityHashMap
)
{
IdentityHashMap
m
=
(
IdentityHashMap
)
o
;
IdentityHashMap
<?,?>
m
=
(
IdentityHashMap
<?,?>
)
o
;
if
(
m
.
size
()
!=
size
)
return
false
;
...
...
@@ -650,7 +653,7 @@ public class IdentityHashMap<K,V>
}
return
true
;
}
else
if
(
o
instanceof
Map
)
{
Map
m
=
(
Map
)
o
;
Map
<?,?>
m
=
(
Map
<?,?>
)
o
;
return
entrySet
().
equals
(
m
.
entrySet
());
}
else
{
return
false
;
// o is not a Map
...
...
@@ -698,7 +701,7 @@ public class IdentityHashMap<K,V>
*/
public
Object
clone
()
{
try
{
IdentityHashMap
<
K
,
V
>
m
=
(
IdentityHashMap
<
K
,
V
>)
super
.
clone
();
IdentityHashMap
<
?,?>
m
=
(
IdentityHashMap
<?,?
>)
super
.
clone
();
m
.
entrySet
=
null
;
m
.
table
=
table
.
clone
();
return
m
;
...
...
@@ -768,7 +771,7 @@ public class IdentityHashMap<K,V>
int
len
=
tab
.
length
;
int
d
=
deletedSlot
;
K
key
=
(
K
)
tab
[
d
];
Object
key
=
tab
[
d
];
tab
[
d
]
=
null
;
// vacate the slot
tab
[
d
+
1
]
=
null
;
...
...
@@ -818,12 +821,14 @@ public class IdentityHashMap<K,V>
}
private
class
KeyIterator
extends
IdentityHashMapIterator
<
K
>
{
@SuppressWarnings
(
"unchecked"
)
public
K
next
()
{
return
(
K
)
unmaskNull
(
traversalTable
[
nextIndex
()]);
}
}
private
class
ValueIterator
extends
IdentityHashMapIterator
<
V
>
{
@SuppressWarnings
(
"unchecked"
)
public
V
next
()
{
return
(
V
)
traversalTable
[
nextIndex
()
+
1
];
}
...
...
@@ -854,16 +859,19 @@ public class IdentityHashMap<K,V>
this
.
index
=
index
;
}
@SuppressWarnings
(
"unchecked"
)
public
K
getKey
()
{
checkIndexForEntryUse
();
return
(
K
)
unmaskNull
(
traversalTable
[
index
]);
}
@SuppressWarnings
(
"unchecked"
)
public
V
getValue
()
{
checkIndexForEntryUse
();
return
(
V
)
traversalTable
[
index
+
1
];
}
@SuppressWarnings
(
"unchecked"
)
public
V
setValue
(
V
value
)
{
checkIndexForEntryUse
();
V
oldValue
=
(
V
)
traversalTable
[
index
+
1
];
...
...
@@ -880,7 +888,7 @@ public class IdentityHashMap<K,V>
if
(!(
o
instanceof
Map
.
Entry
))
return
false
;
Map
.
Entry
e
=
(
Map
.
Entry
)
o
;
Map
.
Entry
<?,?>
e
=
(
Map
.
Entry
<?,?>
)
o
;
return
(
e
.
getKey
()
==
unmaskNull
(
traversalTable
[
index
])
&&
e
.
getValue
()
==
traversalTable
[
index
+
1
]);
}
...
...
@@ -1109,13 +1117,13 @@ public class IdentityHashMap<K,V>
public
boolean
contains
(
Object
o
)
{
if
(!(
o
instanceof
Map
.
Entry
))
return
false
;
Map
.
Entry
entry
=
(
Map
.
Entry
)
o
;
Map
.
Entry
<?,?>
entry
=
(
Map
.
Entry
<?,?>
)
o
;
return
containsMapping
(
entry
.
getKey
(),
entry
.
getValue
());
}
public
boolean
remove
(
Object
o
)
{
if
(!(
o
instanceof
Map
.
Entry
))
return
false
;
Map
.
Entry
entry
=
(
Map
.
Entry
)
o
;
Map
.
Entry
<?,?>
entry
=
(
Map
.
Entry
<?,?>
)
o
;
return
removeMapping
(
entry
.
getKey
(),
entry
.
getValue
());
}
public
int
size
()
{
...
...
@@ -1213,8 +1221,10 @@ public class IdentityHashMap<K,V>
// Read the keys and values, and put the mappings in the table
for
(
int
i
=
0
;
i
<
size
;
i
++)
{
K
key
=
(
K
)
s
.
readObject
();
V
value
=
(
V
)
s
.
readObject
();
@SuppressWarnings
(
"unchecked"
)
K
key
=
(
K
)
s
.
readObject
();
@SuppressWarnings
(
"unchecked"
)
V
value
=
(
V
)
s
.
readObject
();
putForCreate
(
key
,
value
);
}
}
...
...
@@ -1226,7 +1236,7 @@ public class IdentityHashMap<K,V>
private
void
putForCreate
(
K
key
,
V
value
)
throws
IOException
{
K
k
=
(
K
)
maskNull
(
key
);
Object
k
=
maskNull
(
key
);
Object
[]
tab
=
table
;
int
len
=
tab
.
length
;
int
i
=
hash
(
k
,
len
);
...
...
src/share/classes/java/util/IllegalFormatConversionException.java
浏览文件 @
3fa1612e
...
...
@@ -40,7 +40,7 @@ public class IllegalFormatConversionException extends IllegalFormatException {
private
static
final
long
serialVersionUID
=
17000126L
;
private
char
c
;
private
Class
arg
;
private
Class
<?>
arg
;
/**
* Constructs an instance of this class with the mismatched conversion and
...
...
src/share/classes/java/util/JumboEnumSet.java
浏览文件 @
3fa1612e
...
...
@@ -46,7 +46,7 @@ class JumboEnumSet<E extends Enum<E>> extends EnumSet<E> {
// Redundant - maintained for performance
private
int
size
=
0
;
JumboEnumSet
(
Class
<
E
>
elementType
,
Enum
[]
universe
)
{
JumboEnumSet
(
Class
<
E
>
elementType
,
Enum
<?>
[]
universe
)
{
super
(
elementType
,
universe
);
elements
=
new
long
[(
universe
.
length
+
63
)
>>>
6
];
}
...
...
@@ -127,6 +127,7 @@ class JumboEnumSet<E extends Enum<E>> extends EnumSet<E> {
return
unseen
!=
0
;
}
@Override
public
E
next
()
{
if
(!
hasNext
())
throw
new
NoSuchElementException
();
...
...
@@ -176,11 +177,11 @@ class JumboEnumSet<E extends Enum<E>> extends EnumSet<E> {
public
boolean
contains
(
Object
e
)
{
if
(
e
==
null
)
return
false
;
Class
eClass
=
e
.
getClass
();
Class
<?>
eClass
=
e
.
getClass
();
if
(
eClass
!=
elementType
&&
eClass
.
getSuperclass
()
!=
elementType
)
return
false
;
int
eOrdinal
=
((
Enum
)
e
).
ordinal
();
int
eOrdinal
=
((
Enum
<?>
)
e
).
ordinal
();
return
(
elements
[
eOrdinal
>>>
6
]
&
(
1L
<<
eOrdinal
))
!=
0
;
}
...
...
@@ -217,10 +218,10 @@ class JumboEnumSet<E extends Enum<E>> extends EnumSet<E> {
public
boolean
remove
(
Object
e
)
{
if
(
e
==
null
)
return
false
;
Class
eClass
=
e
.
getClass
();
Class
<?>
eClass
=
e
.
getClass
();
if
(
eClass
!=
elementType
&&
eClass
.
getSuperclass
()
!=
elementType
)
return
false
;
int
eOrdinal
=
((
Enum
)
e
).
ordinal
();
int
eOrdinal
=
((
Enum
<?>
)
e
).
ordinal
();
int
eWordNum
=
eOrdinal
>>>
6
;
long
oldElements
=
elements
[
eWordNum
];
...
...
@@ -246,7 +247,7 @@ class JumboEnumSet<E extends Enum<E>> extends EnumSet<E> {
if
(!(
c
instanceof
JumboEnumSet
))
return
super
.
containsAll
(
c
);
JumboEnumSet
es
=
(
JumboEnumSet
)
c
;
JumboEnumSet
<?>
es
=
(
JumboEnumSet
<?>
)
c
;
if
(
es
.
elementType
!=
elementType
)
return
es
.
isEmpty
();
...
...
@@ -268,7 +269,7 @@ class JumboEnumSet<E extends Enum<E>> extends EnumSet<E> {
if
(!(
c
instanceof
JumboEnumSet
))
return
super
.
addAll
(
c
);
JumboEnumSet
es
=
(
JumboEnumSet
)
c
;
JumboEnumSet
<?>
es
=
(
JumboEnumSet
<?>
)
c
;
if
(
es
.
elementType
!=
elementType
)
{
if
(
es
.
isEmpty
())
return
false
;
...
...
@@ -294,7 +295,7 @@ class JumboEnumSet<E extends Enum<E>> extends EnumSet<E> {
if
(!(
c
instanceof
JumboEnumSet
))
return
super
.
removeAll
(
c
);
JumboEnumSet
es
=
(
JumboEnumSet
)
c
;
JumboEnumSet
<?>
es
=
(
JumboEnumSet
<?>
)
c
;
if
(
es
.
elementType
!=
elementType
)
return
false
;
...
...
@@ -348,7 +349,7 @@ class JumboEnumSet<E extends Enum<E>> extends EnumSet<E> {
if
(!(
o
instanceof
JumboEnumSet
))
return
super
.
equals
(
o
);
JumboEnumSet
es
=
(
JumboEnumSet
)
o
;
JumboEnumSet
<?>
es
=
(
JumboEnumSet
<?>
)
o
;
if
(
es
.
elementType
!=
elementType
)
return
size
==
0
&&
es
.
size
==
0
;
...
...
src/share/classes/java/util/LinkedHashMap.java
浏览文件 @
3fa1612e
...
...
@@ -246,11 +246,12 @@ public class LinkedHashMap<K,V>
* by superclass resize. It is overridden for performance, as it is
* faster to iterate using our linked list.
*/
@SuppressWarnings
(
"unchecked"
)
void
transfer
(
HashMap
.
Entry
[]
newTable
)
{
int
newCapacity
=
newTable
.
length
;
for
(
Entry
<
K
,
V
>
e
=
header
.
after
;
e
!=
header
;
e
=
e
.
after
)
{
int
index
=
indexFor
(
e
.
hash
,
newCapacity
);
e
.
next
=
newTable
[
index
];
e
.
next
=
(
HashMap
.
Entry
<
K
,
V
>)
newTable
[
index
];
newTable
[
index
]
=
e
;
}
}
...
...
@@ -267,11 +268,11 @@ public class LinkedHashMap<K,V>
public
boolean
containsValue
(
Object
value
)
{
// Overridden to take advantage of faster iterator
if
(
value
==
null
)
{
for
(
Entry
e
=
header
.
after
;
e
!=
header
;
e
=
e
.
after
)
for
(
Entry
<?,?>
e
=
header
.
after
;
e
!=
header
;
e
=
e
.
after
)
if
(
e
.
value
==
null
)
return
true
;
}
else
{
for
(
Entry
e
=
header
.
after
;
e
!=
header
;
e
=
e
.
after
)
for
(
Entry
<?,?>
e
=
header
.
after
;
e
!=
header
;
e
=
e
.
after
)
if
(
value
.
equals
(
e
.
value
))
return
true
;
}
...
...
@@ -437,7 +438,8 @@ public class LinkedHashMap<K,V>
* table or remove the eldest entry.
*/
void
createEntry
(
int
hash
,
K
key
,
V
value
,
int
bucketIndex
)
{
HashMap
.
Entry
<
K
,
V
>
old
=
table
[
bucketIndex
];
@SuppressWarnings
(
"unchecked"
)
HashMap
.
Entry
<
K
,
V
>
old
=
(
HashMap
.
Entry
<
K
,
V
>)
table
[
bucketIndex
];
Entry
<
K
,
V
>
e
=
new
Entry
<>(
hash
,
key
,
value
,
old
);
table
[
bucketIndex
]
=
e
;
e
.
addBefore
(
header
);
...
...
src/share/classes/java/util/Observable.java
浏览文件 @
3fa1612e
...
...
@@ -61,12 +61,12 @@ package java.util;
*/
public
class
Observable
{
private
boolean
changed
=
false
;
private
Vector
obs
;
private
Vector
<
Observer
>
obs
;
/** Construct an Observable with zero Observers. */
public
Observable
()
{
obs
=
new
Vector
();
obs
=
new
Vector
<>
();
}
/**
...
...
src/share/classes/java/util/PriorityQueue.java
浏览文件 @
3fa1612e
...
...
@@ -449,6 +449,7 @@ public class PriorityQueue<E> extends AbstractQueue<E>
* this queue
* @throws NullPointerException if the specified array is null
*/
@SuppressWarnings
(
"unchecked"
)
public
<
T
>
T
[]
toArray
(
T
[]
a
)
{
if
(
a
.
length
<
size
)
// Make a new array of a's runtime type, but my contents:
...
...
@@ -514,6 +515,7 @@ public class PriorityQueue<E> extends AbstractQueue<E>
(
forgetMeNot
!=
null
&&
!
forgetMeNot
.
isEmpty
());
}
@SuppressWarnings
(
"unchecked"
)
public
E
next
()
{
if
(
expectedModCount
!=
modCount
)
throw
new
ConcurrentModificationException
();
...
...
@@ -571,8 +573,10 @@ public class PriorityQueue<E> extends AbstractQueue<E>
return
null
;
int
s
=
--
size
;
modCount
++;
E
result
=
(
E
)
queue
[
0
];
E
x
=
(
E
)
queue
[
s
];
@SuppressWarnings
(
"unchecked"
)
E
result
=
(
E
)
queue
[
0
];
@SuppressWarnings
(
"unchecked"
)
E
x
=
(
E
)
queue
[
s
];
queue
[
s
]
=
null
;
if
(
s
!=
0
)
siftDown
(
0
,
x
);
...
...
@@ -598,7 +602,8 @@ public class PriorityQueue<E> extends AbstractQueue<E>
if
(
s
==
i
)
// removed last element
queue
[
i
]
=
null
;
else
{
E
moved
=
(
E
)
queue
[
s
];
@SuppressWarnings
(
"unchecked"
)
E
moved
=
(
E
)
queue
[
s
];
queue
[
s
]
=
null
;
siftDown
(
i
,
moved
);
if
(
queue
[
i
]
==
moved
)
{
...
...
@@ -629,6 +634,7 @@ public class PriorityQueue<E> extends AbstractQueue<E>
siftUpComparable
(
k
,
x
);
}
@SuppressWarnings
(
"unchecked"
)
private
void
siftUpComparable
(
int
k
,
E
x
)
{
Comparable
<?
super
E
>
key
=
(
Comparable
<?
super
E
>)
x
;
while
(
k
>
0
)
{
...
...
@@ -645,8 +651,9 @@ public class PriorityQueue<E> extends AbstractQueue<E>
private
void
siftUpUsingComparator
(
int
k
,
E
x
)
{
while
(
k
>
0
)
{
int
parent
=
(
k
-
1
)
>>>
1
;
Object
e
=
queue
[
parent
];
if
(
comparator
.
compare
(
x
,
(
E
)
e
)
>=
0
)
@SuppressWarnings
(
"unchecked"
)
E
e
=
(
E
)
queue
[
parent
];
if
(
comparator
.
compare
(
x
,
e
)
>=
0
)
break
;
queue
[
k
]
=
e
;
k
=
parent
;
...
...
@@ -669,6 +676,7 @@ public class PriorityQueue<E> extends AbstractQueue<E>
siftDownComparable
(
k
,
x
);
}
@SuppressWarnings
(
"unchecked"
)
private
void
siftDownComparable
(
int
k
,
E
x
)
{
Comparable
<?
super
E
>
key
=
(
Comparable
<?
super
E
>)
x
;
int
half
=
size
>>>
1
;
// loop while a non-leaf
...
...
@@ -687,6 +695,7 @@ public class PriorityQueue<E> extends AbstractQueue<E>
queue
[
k
]
=
key
;
}
@SuppressWarnings
(
"unchecked"
)
private
void
siftDownUsingComparator
(
int
k
,
E
x
)
{
int
half
=
size
>>>
1
;
while
(
k
<
half
)
{
...
...
@@ -708,6 +717,7 @@ public class PriorityQueue<E> extends AbstractQueue<E>
* Establishes the heap invariant (described above) in the entire tree,
* assuming nothing about the order of the elements prior to the call.
*/
@SuppressWarnings
(
"unchecked"
)
private
void
heapify
()
{
for
(
int
i
=
(
size
>>>
1
)
-
1
;
i
>=
0
;
i
--)
siftDown
(
i
,
(
E
)
queue
[
i
]);
...
...
src/share/classes/java/util/Properties.java
浏览文件 @
3fa1612e
...
...
@@ -824,7 +824,7 @@ class Properties extends Hashtable<Object,Object> {
bw
.
write
(
"#"
+
new
Date
().
toString
());
bw
.
newLine
();
synchronized
(
this
)
{
for
(
Enumeration
e
=
keys
();
e
.
hasMoreElements
();)
{
for
(
Enumeration
<?>
e
=
keys
();
e
.
hasMoreElements
();)
{
String
key
=
(
String
)
e
.
nextElement
();
String
val
=
(
String
)
get
(
key
);
key
=
saveConvert
(
key
,
true
,
escUnicode
);
...
...
@@ -987,7 +987,7 @@ class Properties extends Hashtable<Object,Object> {
* @see #stringPropertyNames
*/
public
Enumeration
<?>
propertyNames
()
{
Hashtable
h
=
new
Hashtable
();
Hashtable
<
String
,
Object
>
h
=
new
Hashtable
<>
();
enumerate
(
h
);
return
h
.
keys
();
}
...
...
@@ -1026,10 +1026,10 @@ class Properties extends Hashtable<Object,Object> {
*/
public
void
list
(
PrintStream
out
)
{
out
.
println
(
"-- listing properties --"
);
Hashtable
h
=
new
Hashtable
();
Hashtable
<
String
,
Object
>
h
=
new
Hashtable
<>
();
enumerate
(
h
);
for
(
Enumeration
e
=
h
.
keys
()
;
e
.
hasMoreElements
()
;)
{
String
key
=
(
String
)
e
.
nextElement
();
for
(
Enumeration
<
String
>
e
=
h
.
keys
()
;
e
.
hasMoreElements
()
;)
{
String
key
=
e
.
nextElement
();
String
val
=
(
String
)
h
.
get
(
key
);
if
(
val
.
length
()
>
40
)
{
val
=
val
.
substring
(
0
,
37
)
+
"..."
;
...
...
@@ -1054,10 +1054,10 @@ class Properties extends Hashtable<Object,Object> {
*/
public
void
list
(
PrintWriter
out
)
{
out
.
println
(
"-- listing properties --"
);
Hashtable
h
=
new
Hashtable
();
Hashtable
<
String
,
Object
>
h
=
new
Hashtable
<>
();
enumerate
(
h
);
for
(
Enumeration
e
=
h
.
keys
()
;
e
.
hasMoreElements
()
;)
{
String
key
=
(
String
)
e
.
nextElement
();
for
(
Enumeration
<
String
>
e
=
h
.
keys
()
;
e
.
hasMoreElements
()
;)
{
String
key
=
e
.
nextElement
();
String
val
=
(
String
)
h
.
get
(
key
);
if
(
val
.
length
()
>
40
)
{
val
=
val
.
substring
(
0
,
37
)
+
"..."
;
...
...
@@ -1072,11 +1072,11 @@ class Properties extends Hashtable<Object,Object> {
* @throws ClassCastException if any of the property keys
* is not of String type.
*/
private
synchronized
void
enumerate
(
Hashtable
h
)
{
private
synchronized
void
enumerate
(
Hashtable
<
String
,
Object
>
h
)
{
if
(
defaults
!=
null
)
{
defaults
.
enumerate
(
h
);
}
for
(
Enumeration
e
=
keys
()
;
e
.
hasMoreElements
()
;)
{
for
(
Enumeration
<?>
e
=
keys
()
;
e
.
hasMoreElements
()
;)
{
String
key
=
(
String
)
e
.
nextElement
();
h
.
put
(
key
,
get
(
key
));
}
...
...
@@ -1091,7 +1091,7 @@ class Properties extends Hashtable<Object,Object> {
if
(
defaults
!=
null
)
{
defaults
.
enumerateStringProperties
(
h
);
}
for
(
Enumeration
e
=
keys
()
;
e
.
hasMoreElements
()
;)
{
for
(
Enumeration
<?>
e
=
keys
()
;
e
.
hasMoreElements
()
;)
{
Object
k
=
e
.
nextElement
();
Object
v
=
get
(
k
);
if
(
k
instanceof
String
&&
v
instanceof
String
)
{
...
...
src/share/classes/java/util/PropertyPermission.java
浏览文件 @
3fa1612e
...
...
@@ -442,7 +442,7 @@ implements Serializable
* Key is property name; value is PropertyPermission.
* Not serialized; see serialization section at end of class.
*/
private
transient
Map
<
String
,
Permission
>
perms
;
private
transient
Map
<
String
,
P
ropertyP
ermission
>
perms
;
/**
* Boolean saying if "*" is in the collection.
...
...
@@ -488,7 +488,7 @@ implements Serializable
String
propName
=
pp
.
getName
();
synchronized
(
this
)
{
PropertyPermission
existing
=
(
PropertyPermission
)
perms
.
get
(
propName
);
PropertyPermission
existing
=
perms
.
get
(
propName
);
if
(
existing
!=
null
)
{
int
oldMask
=
existing
.
getMask
();
...
...
@@ -499,7 +499,7 @@ implements Serializable
perms
.
put
(
propName
,
new
PropertyPermission
(
propName
,
actions
));
}
}
else
{
perms
.
put
(
propName
,
p
ermission
);
perms
.
put
(
propName
,
p
p
);
}
}
...
...
@@ -533,7 +533,7 @@ implements Serializable
// short circuit if the "*" Permission was added
if
(
all_allowed
)
{
synchronized
(
this
)
{
x
=
(
PropertyPermission
)
perms
.
get
(
"*"
);
x
=
perms
.
get
(
"*"
);
}
if
(
x
!=
null
)
{
effective
|=
x
.
getMask
();
...
...
@@ -550,7 +550,7 @@ implements Serializable
//System.out.println("check "+name);
synchronized
(
this
)
{
x
=
(
PropertyPermission
)
perms
.
get
(
name
);
x
=
perms
.
get
(
name
);
}
if
(
x
!=
null
)
{
...
...
@@ -570,7 +570,7 @@ implements Serializable
name
=
name
.
substring
(
0
,
last
+
1
)
+
"*"
;
//System.out.println("check "+name);
synchronized
(
this
)
{
x
=
(
PropertyPermission
)
perms
.
get
(
name
);
x
=
perms
.
get
(
name
);
}
if
(
x
!=
null
)
{
...
...
@@ -592,11 +592,15 @@ implements Serializable
*
* @return an enumeration of all the PropertyPermission objects.
*/
@SuppressWarnings
(
"unchecked"
)
public
Enumeration
<
Permission
>
elements
()
{
// Convert Iterator of Map values into an Enumeration
synchronized
(
this
)
{
return
Collections
.
enumeration
(
perms
.
values
());
/**
* Casting to rawtype since Enumeration<PropertyPermission>
* cannot be directly cast to Enumeration<Permission>
*/
return
(
Enumeration
)
Collections
.
enumeration
(
perms
.
values
());
}
}
...
...
@@ -633,7 +637,8 @@ implements Serializable
// Don't call out.defaultWriteObject()
// Copy perms into a Hashtable
Hashtable
<
String
,
Permission
>
permissions
=
new
Hashtable
<>(
perms
.
size
()*
2
);
Hashtable
<
String
,
Permission
>
permissions
=
new
Hashtable
<>(
perms
.
size
()*
2
);
synchronized
(
this
)
{
permissions
.
putAll
(
perms
);
}
...
...
@@ -661,8 +666,8 @@ implements Serializable
// Get permissions
@SuppressWarnings
(
"unchecked"
)
Hashtable
<
String
,
Permission
>
permissions
=
(
Hashtable
<
String
,
Permission
>)
gfields
.
get
(
"permissions"
,
null
);
Hashtable
<
String
,
P
ropertyP
ermission
>
permissions
=
(
Hashtable
<
String
,
P
ropertyP
ermission
>)
gfields
.
get
(
"permissions"
,
null
);
perms
=
new
HashMap
<>(
permissions
.
size
()*
2
);
perms
.
putAll
(
permissions
);
}
...
...
src/share/classes/java/util/RegularEnumSet.java
浏览文件 @
3fa1612e
...
...
@@ -41,7 +41,7 @@ class RegularEnumSet<E extends Enum<E>> extends EnumSet<E> {
*/
private
long
elements
=
0L
;
RegularEnumSet
(
Class
<
E
>
elementType
,
Enum
[]
universe
)
{
RegularEnumSet
(
Class
<
E
>
elementType
,
Enum
<?>
[]
universe
)
{
super
(
elementType
,
universe
);
}
...
...
@@ -96,6 +96,7 @@ class RegularEnumSet<E extends Enum<E>> extends EnumSet<E> {
return
unseen
!=
0
;
}
@SuppressWarnings
(
"unchecked"
)
public
E
next
()
{
if
(
unseen
==
0
)
throw
new
NoSuchElementException
();
...
...
@@ -139,11 +140,11 @@ class RegularEnumSet<E extends Enum<E>> extends EnumSet<E> {
public
boolean
contains
(
Object
e
)
{
if
(
e
==
null
)
return
false
;
Class
eClass
=
e
.
getClass
();
Class
<?>
eClass
=
e
.
getClass
();
if
(
eClass
!=
elementType
&&
eClass
.
getSuperclass
()
!=
elementType
)
return
false
;
return
(
elements
&
(
1L
<<
((
Enum
)
e
).
ordinal
()))
!=
0
;
return
(
elements
&
(
1L
<<
((
Enum
<?>
)
e
).
ordinal
()))
!=
0
;
}
// Modification Operations
...
...
@@ -160,7 +161,7 @@ class RegularEnumSet<E extends Enum<E>> extends EnumSet<E> {
typeCheck
(
e
);
long
oldElements
=
elements
;
elements
|=
(
1L
<<
((
Enum
)
e
).
ordinal
());
elements
|=
(
1L
<<
((
Enum
<?>
)
e
).
ordinal
());
return
elements
!=
oldElements
;
}
...
...
@@ -173,12 +174,12 @@ class RegularEnumSet<E extends Enum<E>> extends EnumSet<E> {
public
boolean
remove
(
Object
e
)
{
if
(
e
==
null
)
return
false
;
Class
eClass
=
e
.
getClass
();
Class
<?>
eClass
=
e
.
getClass
();
if
(
eClass
!=
elementType
&&
eClass
.
getSuperclass
()
!=
elementType
)
return
false
;
long
oldElements
=
elements
;
elements
&=
~(
1L
<<
((
Enum
)
e
).
ordinal
());
elements
&=
~(
1L
<<
((
Enum
<?>
)
e
).
ordinal
());
return
elements
!=
oldElements
;
}
...
...
@@ -197,7 +198,7 @@ class RegularEnumSet<E extends Enum<E>> extends EnumSet<E> {
if
(!(
c
instanceof
RegularEnumSet
))
return
super
.
containsAll
(
c
);
RegularEnumSet
es
=
(
RegularEnumSet
)
c
;
RegularEnumSet
<?>
es
=
(
RegularEnumSet
<?>
)
c
;
if
(
es
.
elementType
!=
elementType
)
return
es
.
isEmpty
();
...
...
@@ -216,7 +217,7 @@ class RegularEnumSet<E extends Enum<E>> extends EnumSet<E> {
if
(!(
c
instanceof
RegularEnumSet
))
return
super
.
addAll
(
c
);
RegularEnumSet
es
=
(
RegularEnumSet
)
c
;
RegularEnumSet
<?>
es
=
(
RegularEnumSet
<?>
)
c
;
if
(
es
.
elementType
!=
elementType
)
{
if
(
es
.
isEmpty
())
return
false
;
...
...
@@ -242,7 +243,7 @@ class RegularEnumSet<E extends Enum<E>> extends EnumSet<E> {
if
(!(
c
instanceof
RegularEnumSet
))
return
super
.
removeAll
(
c
);
RegularEnumSet
es
=
(
RegularEnumSet
)
c
;
RegularEnumSet
<?>
es
=
(
RegularEnumSet
<?>
)
c
;
if
(
es
.
elementType
!=
elementType
)
return
false
;
...
...
@@ -295,7 +296,7 @@ class RegularEnumSet<E extends Enum<E>> extends EnumSet<E> {
if
(!(
o
instanceof
RegularEnumSet
))
return
super
.
equals
(
o
);
RegularEnumSet
es
=
(
RegularEnumSet
)
o
;
RegularEnumSet
<?>
es
=
(
RegularEnumSet
<?>
)
o
;
if
(
es
.
elementType
!=
elementType
)
return
elements
==
0
&&
es
.
elements
==
0
;
return
es
.
elements
==
elements
;
...
...
src/share/classes/java/util/ResourceBundle.java
浏览文件 @
3fa1612e
...
...
@@ -294,7 +294,8 @@ public abstract class ResourceBundle {
/**
* Queue for reference objects referring to class loaders or bundles.
*/
private
static
final
ReferenceQueue
<
Object
>
referenceQueue
=
new
ReferenceQueue
<>();
private
static
final
ReferenceQueue
<
Object
>
referenceQueue
=
new
ReferenceQueue
<>();
/**
* The parent bundle of this bundle.
...
...
@@ -417,7 +418,7 @@ public abstract class ResourceBundle {
* caller's caller.
*/
private
static
ClassLoader
getLoader
()
{
Class
[]
stack
=
getClassContext
();
Class
<?>
[]
stack
=
getClassContext
();
/* Magic number 2 identifies our caller's caller */
Class
<?>
c
=
stack
[
2
];
ClassLoader
cl
=
(
c
==
null
)
?
null
:
c
.
getClassLoader
();
...
...
@@ -434,7 +435,7 @@ public abstract class ResourceBundle {
return
cl
;
}
private
static
native
Class
[]
getClassContext
();
private
static
native
Class
<?>
[]
getClassContext
();
/**
* A wrapper of ClassLoader.getSystemClassLoader().
...
...
src/share/classes/java/util/ServiceLoader.java
浏览文件 @
3fa1612e
...
...
@@ -218,20 +218,20 @@ public final class ServiceLoader<S>
reload
();
}
private
static
void
fail
(
Class
service
,
String
msg
,
Throwable
cause
)
private
static
void
fail
(
Class
<?>
service
,
String
msg
,
Throwable
cause
)
throws
ServiceConfigurationError
{
throw
new
ServiceConfigurationError
(
service
.
getName
()
+
": "
+
msg
,
cause
);
}
private
static
void
fail
(
Class
service
,
String
msg
)
private
static
void
fail
(
Class
<?>
service
,
String
msg
)
throws
ServiceConfigurationError
{
throw
new
ServiceConfigurationError
(
service
.
getName
()
+
": "
+
msg
);
}
private
static
void
fail
(
Class
service
,
URL
u
,
int
line
,
String
msg
)
private
static
void
fail
(
Class
<?>
service
,
URL
u
,
int
line
,
String
msg
)
throws
ServiceConfigurationError
{
fail
(
service
,
u
+
":"
+
line
+
": "
+
msg
);
...
...
@@ -240,7 +240,7 @@ public final class ServiceLoader<S>
// Parse a single line from the given configuration file, adding the name
// on the line to the names list.
//
private
int
parseLine
(
Class
service
,
URL
u
,
BufferedReader
r
,
int
lc
,
private
int
parseLine
(
Class
<?>
service
,
URL
u
,
BufferedReader
r
,
int
lc
,
List
<
String
>
names
)
throws
IOException
,
ServiceConfigurationError
{
...
...
@@ -286,7 +286,7 @@ public final class ServiceLoader<S>
// If an I/O error occurs while reading from the given URL, or
// if a configuration-file format error is detected
//
private
Iterator
<
String
>
parse
(
Class
service
,
URL
u
)
private
Iterator
<
String
>
parse
(
Class
<?>
service
,
URL
u
)
throws
ServiceConfigurationError
{
InputStream
in
=
null
;
...
...
src/share/classes/java/util/TimeZone.java
浏览文件 @
3fa1612e
...
...
@@ -428,7 +428,7 @@ abstract public class TimeZone implements Serializable, Cloneable {
// The structure is:
// Map(key=id, value=SoftReference(Map(key=locale, value=displaynames)))
private
static
final
Map
<
String
,
SoftReference
<
Map
<
Locale
,
String
[]>>>
CACHE
=
new
ConcurrentHashMap
<
String
,
SoftReference
<
Map
<
Locale
,
String
[]>>
>();
new
ConcurrentHashMap
<>();
}
private
static
final
String
[]
getDisplayNames
(
String
id
,
Locale
locale
)
{
...
...
@@ -452,9 +452,9 @@ abstract public class TimeZone implements Serializable, Cloneable {
String
[]
names
=
TimeZoneNameUtility
.
retrieveDisplayNames
(
id
,
locale
);
if
(
names
!=
null
)
{
Map
<
Locale
,
String
[]>
perLocale
=
new
ConcurrentHashMap
<
Locale
,
String
[]
>();
Map
<
Locale
,
String
[]>
perLocale
=
new
ConcurrentHashMap
<>();
perLocale
.
put
(
locale
,
names
);
ref
=
new
SoftReference
<
Map
<
Locale
,
String
[]>
>(
perLocale
);
ref
=
new
SoftReference
<>(
perLocale
);
displayNames
.
put
(
id
,
ref
);
}
return
names
;
...
...
src/share/classes/java/util/TreeMap.java
浏览文件 @
3fa1612e
...
...
@@ -307,7 +307,7 @@ public class TreeMap<K,V>
public
void
putAll
(
Map
<?
extends
K
,
?
extends
V
>
map
)
{
int
mapSize
=
map
.
size
();
if
(
size
==
0
&&
mapSize
!=
0
&&
map
instanceof
SortedMap
)
{
Comparator
c
=
((
SortedMap
)
map
).
comparator
();
Comparator
<?>
c
=
((
SortedMap
<?,?>
)
map
).
comparator
();
if
(
c
==
comparator
||
(
c
!=
null
&&
c
.
equals
(
comparator
)))
{
++
modCount
;
try
{
...
...
@@ -340,7 +340,8 @@ public class TreeMap<K,V>
return
getEntryUsingComparator
(
key
);
if
(
key
==
null
)
throw
new
NullPointerException
();
Comparable
<?
super
K
>
k
=
(
Comparable
<?
super
K
>)
key
;
@SuppressWarnings
(
"unchecked"
)
Comparable
<?
super
K
>
k
=
(
Comparable
<?
super
K
>)
key
;
Entry
<
K
,
V
>
p
=
root
;
while
(
p
!=
null
)
{
int
cmp
=
k
.
compareTo
(
p
.
key
);
...
...
@@ -361,7 +362,8 @@ public class TreeMap<K,V>
* worthwhile here.)
*/
final
Entry
<
K
,
V
>
getEntryUsingComparator
(
Object
key
)
{
K
k
=
(
K
)
key
;
@SuppressWarnings
(
"unchecked"
)
K
k
=
(
K
)
key
;
Comparator
<?
super
K
>
cpr
=
comparator
;
if
(
cpr
!=
null
)
{
Entry
<
K
,
V
>
p
=
root
;
...
...
@@ -554,7 +556,8 @@ public class TreeMap<K,V>
else
{
if
(
key
==
null
)
throw
new
NullPointerException
();
Comparable
<?
super
K
>
k
=
(
Comparable
<?
super
K
>)
key
;
@SuppressWarnings
(
"unchecked"
)
Comparable
<?
super
K
>
k
=
(
Comparable
<?
super
K
>)
key
;
do
{
parent
=
t
;
cmp
=
k
.
compareTo
(
t
.
key
);
...
...
@@ -618,9 +621,9 @@ public class TreeMap<K,V>
* @return a shallow copy of this map
*/
public
Object
clone
()
{
TreeMap
<
K
,
V
>
clone
=
null
;
TreeMap
<
?,?>
clone
;
try
{
clone
=
(
TreeMap
<
K
,
V
>)
super
.
clone
();
clone
=
(
TreeMap
<
?,?
>)
super
.
clone
();
}
catch
(
CloneNotSupportedException
e
)
{
throw
new
InternalError
(
e
);
}
...
...
@@ -803,7 +806,7 @@ public class TreeMap<K,V>
*/
public
NavigableSet
<
K
>
navigableKeySet
()
{
KeySet
<
K
>
nks
=
navigableKeySet
;
return
(
nks
!=
null
)
?
nks
:
(
navigableKeySet
=
new
KeySet
(
this
));
return
(
nks
!=
null
)
?
nks
:
(
navigableKeySet
=
new
KeySet
<>
(
this
));
}
/**
...
...
@@ -859,9 +862,9 @@ public class TreeMap<K,V>
public
NavigableMap
<
K
,
V
>
descendingMap
()
{
NavigableMap
<
K
,
V
>
km
=
descendingMap
;
return
(
km
!=
null
)
?
km
:
(
descendingMap
=
new
DescendingSubMap
(
this
,
true
,
null
,
true
,
true
,
null
,
true
));
(
descendingMap
=
new
DescendingSubMap
<>
(
this
,
true
,
null
,
true
,
true
,
null
,
true
));
}
/**
...
...
@@ -874,9 +877,9 @@ public class TreeMap<K,V>
*/
public
NavigableMap
<
K
,
V
>
subMap
(
K
fromKey
,
boolean
fromInclusive
,
K
toKey
,
boolean
toInclusive
)
{
return
new
AscendingSubMap
(
this
,
false
,
fromKey
,
fromInclusive
,
false
,
toKey
,
toInclusive
);
return
new
AscendingSubMap
<>
(
this
,
false
,
fromKey
,
fromInclusive
,
false
,
toKey
,
toInclusive
);
}
/**
...
...
@@ -888,9 +891,9 @@ public class TreeMap<K,V>
* @since 1.6
*/
public
NavigableMap
<
K
,
V
>
headMap
(
K
toKey
,
boolean
inclusive
)
{
return
new
AscendingSubMap
(
this
,
true
,
null
,
true
,
false
,
toKey
,
inclusive
);
return
new
AscendingSubMap
<>
(
this
,
true
,
null
,
true
,
false
,
toKey
,
inclusive
);
}
/**
...
...
@@ -902,9 +905,9 @@ public class TreeMap<K,V>
* @since 1.6
*/
public
NavigableMap
<
K
,
V
>
tailMap
(
K
fromKey
,
boolean
inclusive
)
{
return
new
AscendingSubMap
(
this
,
false
,
fromKey
,
inclusive
,
true
,
null
,
true
);
return
new
AscendingSubMap
<>
(
this
,
false
,
fromKey
,
inclusive
,
true
,
null
,
true
);
}
/**
...
...
@@ -978,8 +981,8 @@ public class TreeMap<K,V>
public
boolean
contains
(
Object
o
)
{
if
(!(
o
instanceof
Map
.
Entry
))
return
false
;
Map
.
Entry
<
K
,
V
>
entry
=
(
Map
.
Entry
<
K
,
V
>)
o
;
V
value
=
entry
.
getValue
();
Map
.
Entry
<
?,?>
entry
=
(
Map
.
Entry
<?,?
>)
o
;
Object
value
=
entry
.
getValue
();
Entry
<
K
,
V
>
p
=
getEntry
(
entry
.
getKey
());
return
p
!=
null
&&
valEquals
(
p
.
getValue
(),
value
);
}
...
...
@@ -987,8 +990,8 @@ public class TreeMap<K,V>
public
boolean
remove
(
Object
o
)
{
if
(!(
o
instanceof
Map
.
Entry
))
return
false
;
Map
.
Entry
<
K
,
V
>
entry
=
(
Map
.
Entry
<
K
,
V
>)
o
;
V
value
=
entry
.
getValue
();
Map
.
Entry
<
?,?>
entry
=
(
Map
.
Entry
<?,?
>)
o
;
Object
value
=
entry
.
getValue
();
Entry
<
K
,
V
>
p
=
getEntry
(
entry
.
getKey
());
if
(
p
!=
null
&&
valEquals
(
p
.
getValue
(),
value
))
{
deleteEntry
(
p
);
...
...
@@ -1023,21 +1026,21 @@ public class TreeMap<K,V>
}
static
final
class
KeySet
<
E
>
extends
AbstractSet
<
E
>
implements
NavigableSet
<
E
>
{
private
final
NavigableMap
<
E
,
Object
>
m
;
KeySet
(
NavigableMap
<
E
,
Object
>
map
)
{
m
=
map
;
}
private
final
NavigableMap
<
E
,
?
>
m
;
KeySet
(
NavigableMap
<
E
,
?
>
map
)
{
m
=
map
;
}
public
Iterator
<
E
>
iterator
()
{
if
(
m
instanceof
TreeMap
)
return
((
TreeMap
<
E
,
Object
>)
m
).
keyIterator
();
return
((
TreeMap
<
E
,
?
>)
m
).
keyIterator
();
else
return
(
Iterator
<
E
>)(((
TreeMap
.
NavigableSubMap
)
m
).
keyIterator
()
);
return
(
(
TreeMap
.
NavigableSubMap
<
E
,?>)
m
).
keyIterator
(
);
}
public
Iterator
<
E
>
descendingIterator
()
{
if
(
m
instanceof
TreeMap
)
return
((
TreeMap
<
E
,
Object
>)
m
).
descendingKeyIterator
();
return
((
TreeMap
<
E
,
?
>)
m
).
descendingKeyIterator
();
else
return
(
Iterator
<
E
>)(((
TreeMap
.
NavigableSubMap
)
m
).
descendingKeyIterator
()
);
return
(
(
TreeMap
.
NavigableSubMap
<
E
,?>)
m
).
descendingKeyIterator
(
);
}
public
int
size
()
{
return
m
.
size
();
}
...
...
@@ -1052,11 +1055,11 @@ public class TreeMap<K,V>
public
E
last
()
{
return
m
.
lastKey
();
}
public
Comparator
<?
super
E
>
comparator
()
{
return
m
.
comparator
();
}
public
E
pollFirst
()
{
Map
.
Entry
<
E
,
Object
>
e
=
m
.
pollFirstEntry
();
Map
.
Entry
<
E
,
?
>
e
=
m
.
pollFirstEntry
();
return
(
e
==
null
)
?
null
:
e
.
getKey
();
}
public
E
pollLast
()
{
Map
.
Entry
<
E
,
Object
>
e
=
m
.
pollLastEntry
();
Map
.
Entry
<
E
,
?
>
e
=
m
.
pollLastEntry
();
return
(
e
==
null
)
?
null
:
e
.
getKey
();
}
public
boolean
remove
(
Object
o
)
{
...
...
@@ -1085,7 +1088,7 @@ public class TreeMap<K,V>
return
tailSet
(
fromElement
,
true
);
}
public
NavigableSet
<
E
>
descendingSet
()
{
return
new
KeySet
(
m
.
descendingMap
());
return
new
KeySet
<>
(
m
.
descendingMap
());
}
}
...
...
@@ -1184,6 +1187,7 @@ public class TreeMap<K,V>
/**
* Compares two keys using the correct comparison method for this TreeMap.
*/
@SuppressWarnings
(
"unchecked"
)
final
int
compare
(
Object
k1
,
Object
k2
)
{
return
comparator
==
null
?
((
Comparable
<?
super
K
>)
k1
).
compareTo
((
K
)
k2
)
:
comparator
.
compare
((
K
)
k1
,
(
K
)
k2
);
...
...
@@ -1488,7 +1492,7 @@ public class TreeMap<K,V>
public
final
NavigableSet
<
K
>
navigableKeySet
()
{
KeySet
<
K
>
nksv
=
navigableKeySetView
;
return
(
nksv
!=
null
)
?
nksv
:
(
navigableKeySetView
=
new
TreeMap
.
KeySet
(
this
));
(
navigableKeySetView
=
new
TreeMap
.
KeySet
<>
(
this
));
}
public
final
Set
<
K
>
keySet
()
{
...
...
@@ -1522,7 +1526,7 @@ public class TreeMap<K,V>
if
(
size
==
-
1
||
sizeModCount
!=
m
.
modCount
)
{
sizeModCount
=
m
.
modCount
;
size
=
0
;
Iterator
i
=
iterator
();
Iterator
<?>
i
=
iterator
();
while
(
i
.
hasNext
())
{
size
++;
i
.
next
();
...
...
@@ -1539,11 +1543,11 @@ public class TreeMap<K,V>
public
boolean
contains
(
Object
o
)
{
if
(!(
o
instanceof
Map
.
Entry
))
return
false
;
Map
.
Entry
<
K
,
V
>
entry
=
(
Map
.
Entry
<
K
,
V
>)
o
;
K
key
=
entry
.
getKey
();
Map
.
Entry
<
?,?>
entry
=
(
Map
.
Entry
<?,?
>)
o
;
Object
key
=
entry
.
getKey
();
if
(!
inRange
(
key
))
return
false
;
TreeMap
.
Entry
node
=
m
.
getEntry
(
key
);
TreeMap
.
Entry
<?,?>
node
=
m
.
getEntry
(
key
);
return
node
!=
null
&&
valEquals
(
node
.
getValue
(),
entry
.
getValue
());
}
...
...
@@ -1551,8 +1555,8 @@ public class TreeMap<K,V>
public
boolean
remove
(
Object
o
)
{
if
(!(
o
instanceof
Map
.
Entry
))
return
false
;
Map
.
Entry
<
K
,
V
>
entry
=
(
Map
.
Entry
<
K
,
V
>)
o
;
K
key
=
entry
.
getKey
();
Map
.
Entry
<
?,?>
entry
=
(
Map
.
Entry
<?,?
>)
o
;
Object
key
=
entry
.
getKey
();
if
(!
inRange
(
key
))
return
false
;
TreeMap
.
Entry
<
K
,
V
>
node
=
m
.
getEntry
(
key
);
...
...
@@ -1709,34 +1713,34 @@ public class TreeMap<K,V>
throw
new
IllegalArgumentException
(
"fromKey out of range"
);
if
(!
inRange
(
toKey
,
toInclusive
))
throw
new
IllegalArgumentException
(
"toKey out of range"
);
return
new
AscendingSubMap
(
m
,
false
,
fromKey
,
fromInclusive
,
false
,
toKey
,
toInclusive
);
return
new
AscendingSubMap
<>
(
m
,
false
,
fromKey
,
fromInclusive
,
false
,
toKey
,
toInclusive
);
}
public
NavigableMap
<
K
,
V
>
headMap
(
K
toKey
,
boolean
inclusive
)
{
if
(!
inRange
(
toKey
,
inclusive
))
throw
new
IllegalArgumentException
(
"toKey out of range"
);
return
new
AscendingSubMap
(
m
,
fromStart
,
lo
,
loInclusive
,
false
,
toKey
,
inclusive
);
return
new
AscendingSubMap
<>
(
m
,
fromStart
,
lo
,
loInclusive
,
false
,
toKey
,
inclusive
);
}
public
NavigableMap
<
K
,
V
>
tailMap
(
K
fromKey
,
boolean
inclusive
)
{
if
(!
inRange
(
fromKey
,
inclusive
))
throw
new
IllegalArgumentException
(
"fromKey out of range"
);
return
new
AscendingSubMap
(
m
,
false
,
fromKey
,
inclusive
,
toEnd
,
hi
,
hiInclusive
);
return
new
AscendingSubMap
<>
(
m
,
false
,
fromKey
,
inclusive
,
toEnd
,
hi
,
hiInclusive
);
}
public
NavigableMap
<
K
,
V
>
descendingMap
()
{
NavigableMap
<
K
,
V
>
mv
=
descendingMapView
;
return
(
mv
!=
null
)
?
mv
:
(
descendingMapView
=
new
DescendingSubMap
(
m
,
fromStart
,
lo
,
loInclusive
,
toEnd
,
hi
,
hiInclusive
));
new
DescendingSubMap
<>
(
m
,
fromStart
,
lo
,
loInclusive
,
toEnd
,
hi
,
hiInclusive
));
}
Iterator
<
K
>
keyIterator
()
{
...
...
@@ -1790,34 +1794,34 @@ public class TreeMap<K,V>
throw
new
IllegalArgumentException
(
"fromKey out of range"
);
if
(!
inRange
(
toKey
,
toInclusive
))
throw
new
IllegalArgumentException
(
"toKey out of range"
);
return
new
DescendingSubMap
(
m
,
false
,
toKey
,
toInclusive
,
false
,
fromKey
,
fromInclusive
);
return
new
DescendingSubMap
<>
(
m
,
false
,
toKey
,
toInclusive
,
false
,
fromKey
,
fromInclusive
);
}
public
NavigableMap
<
K
,
V
>
headMap
(
K
toKey
,
boolean
inclusive
)
{
if
(!
inRange
(
toKey
,
inclusive
))
throw
new
IllegalArgumentException
(
"toKey out of range"
);
return
new
DescendingSubMap
(
m
,
false
,
toKey
,
inclusive
,
toEnd
,
hi
,
hiInclusive
);
return
new
DescendingSubMap
<>
(
m
,
false
,
toKey
,
inclusive
,
toEnd
,
hi
,
hiInclusive
);
}
public
NavigableMap
<
K
,
V
>
tailMap
(
K
fromKey
,
boolean
inclusive
)
{
if
(!
inRange
(
fromKey
,
inclusive
))
throw
new
IllegalArgumentException
(
"fromKey out of range"
);
return
new
DescendingSubMap
(
m
,
fromStart
,
lo
,
loInclusive
,
false
,
fromKey
,
inclusive
);
return
new
DescendingSubMap
<>
(
m
,
fromStart
,
lo
,
loInclusive
,
false
,
fromKey
,
inclusive
);
}
public
NavigableMap
<
K
,
V
>
descendingMap
()
{
NavigableMap
<
K
,
V
>
mv
=
descendingMapView
;
return
(
mv
!=
null
)
?
mv
:
(
descendingMapView
=
new
AscendingSubMap
(
m
,
fromStart
,
lo
,
loInclusive
,
toEnd
,
hi
,
hiInclusive
));
new
AscendingSubMap
<>
(
m
,
fromStart
,
lo
,
loInclusive
,
toEnd
,
hi
,
hiInclusive
));
}
Iterator
<
K
>
keyIterator
()
{
...
...
@@ -1862,9 +1866,9 @@ public class TreeMap<K,V>
private
boolean
fromStart
=
false
,
toEnd
=
false
;
private
K
fromKey
,
toKey
;
private
Object
readResolve
()
{
return
new
AscendingSubMap
(
TreeMap
.
this
,
fromStart
,
fromKey
,
true
,
toEnd
,
toKey
,
false
);
return
new
AscendingSubMap
<>
(
TreeMap
.
this
,
fromStart
,
fromKey
,
true
,
toEnd
,
toKey
,
false
);
}
public
Set
<
Map
.
Entry
<
K
,
V
>>
entrySet
()
{
throw
new
InternalError
();
}
public
K
lastKey
()
{
throw
new
InternalError
();
}
...
...
@@ -2331,12 +2335,12 @@ public class TreeMap<K,V>
* @param defaultVal if non-null, this default value is used for
* each value in the map. If null, each value is read from
* iterator or stream, as described above.
* @throws IOException propagated from stream reads. This cannot
* @throws
java.io.
IOException propagated from stream reads. This cannot
* occur if str is null.
* @throws ClassNotFoundException propagated from readObject.
* This cannot occur if str is null.
*/
private
void
buildFromSorted
(
int
size
,
Iterator
it
,
private
void
buildFromSorted
(
int
size
,
Iterator
<?>
it
,
java
.
io
.
ObjectInputStream
str
,
V
defaultVal
)
throws
java
.
io
.
IOException
,
ClassNotFoundException
{
...
...
@@ -2359,9 +2363,10 @@ public class TreeMap<K,V>
* @param redLevel the level at which nodes should be red.
* Must be equal to computeRedLevel for tree of this size.
*/
@SuppressWarnings
(
"unchecked"
)
private
final
Entry
<
K
,
V
>
buildFromSorted
(
int
level
,
int
lo
,
int
hi
,
int
redLevel
,
Iterator
it
,
Iterator
<?>
it
,
java
.
io
.
ObjectInputStream
str
,
V
defaultVal
)
throws
java
.
io
.
IOException
,
ClassNotFoundException
{
...
...
@@ -2391,9 +2396,9 @@ public class TreeMap<K,V>
V
value
;
if
(
it
!=
null
)
{
if
(
defaultVal
==
null
)
{
Map
.
Entry
<
K
,
V
>
entry
=
(
Map
.
Entry
<
K
,
V
>)
it
.
next
();
key
=
entry
.
getKey
();
value
=
entry
.
getValue
();
Map
.
Entry
<
?,?>
entry
=
(
Map
.
Entry
<?,?
>)
it
.
next
();
key
=
(
K
)
entry
.
getKey
();
value
=
(
V
)
entry
.
getValue
();
}
else
{
key
=
(
K
)
it
.
next
();
value
=
defaultVal
;
...
...
src/share/classes/java/util/TreeSet.java
浏览文件 @
3fa1612e
...
...
@@ -302,7 +302,7 @@ public class TreeSet<E> extends AbstractSet<E>
m
instanceof
TreeMap
)
{
SortedSet
<?
extends
E
>
set
=
(
SortedSet
<?
extends
E
>)
c
;
TreeMap
<
E
,
Object
>
map
=
(
TreeMap
<
E
,
Object
>)
m
;
Comparator
<?
super
E
>
cc
=
(
Comparator
<?
super
E
>)
set
.
comparator
();
Comparator
<?
>
cc
=
set
.
comparator
();
Comparator
<?
super
E
>
mc
=
map
.
comparator
();
if
(
cc
==
mc
||
(
cc
!=
null
&&
cc
.
equals
(
mc
)))
{
map
.
addAllForTreeSet
(
set
,
PRESENT
);
...
...
@@ -469,8 +469,9 @@ public class TreeSet<E> extends AbstractSet<E>
*
* @return a shallow copy of this set
*/
@SuppressWarnings
(
"unchecked"
)
public
Object
clone
()
{
TreeSet
<
E
>
clone
=
null
;
TreeSet
<
E
>
clone
;
try
{
clone
=
(
TreeSet
<
E
>)
super
.
clone
();
}
catch
(
CloneNotSupportedException
e
)
{
...
...
@@ -519,14 +520,11 @@ public class TreeSet<E> extends AbstractSet<E>
s
.
defaultReadObject
();
// Read in Comparator
Comparator
<?
super
E
>
c
=
(
Comparator
<?
super
E
>)
s
.
readObject
();
@SuppressWarnings
(
"unchecked"
)
Comparator
<?
super
E
>
c
=
(
Comparator
<?
super
E
>)
s
.
readObject
();
// Create backing TreeMap
TreeMap
<
E
,
Object
>
tm
;
if
(
c
==
null
)
tm
=
new
TreeMap
<>();
else
tm
=
new
TreeMap
<>(
c
);
TreeMap
<
E
,
Object
>
tm
=
new
TreeMap
<>(
c
);
m
=
tm
;
// Read in size
...
...
src/share/classes/java/util/WeakHashMap.java
浏览文件 @
3fa1612e
...
...
@@ -186,7 +186,7 @@ public class WeakHashMap<K,V>
@SuppressWarnings
(
"unchecked"
)
private
Entry
<
K
,
V
>[]
newTable
(
int
n
)
{
return
(
Entry
<
K
,
V
>[])
new
Entry
[
n
];
return
(
Entry
<
K
,
V
>[])
new
Entry
<?,?>
[
n
];
}
/**
...
...
test/sun/net/www/protocol/jar/B4957695.java
浏览文件 @
3fa1612e
/*
* Copyright (c) 2003, 20
06
, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2003, 20
12
, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
...
...
@@ -24,8 +24,6 @@
/**
* @test
* @bug 4957695
* @library ../../httptest/
* @build HttpCallback HttpServer ClosedChannelList HttpTransaction AbstractCallback
* @summary URLJarFile.retrieve does not delete tmpFile on IOException
*/
...
...
@@ -34,43 +32,72 @@ import java.net.*;
public
class
B4957695
{
static
int
count
=
0
;
static
boolean
error
=
false
;
static
Server
server
;
static
void
read
(
InputStream
is
)
throws
IOException
{
int
c
,
len
=
0
;
while
((
c
=
is
.
read
())
!=
-
1
)
{
len
+=
c
;
static
class
Server
extends
Thread
{
final
ServerSocket
srv
;
static
final
byte
[]
requestEnd
=
new
byte
[]
{
'\r'
,
'\n'
,
'\r'
,
'\n'
};
Server
(
ServerSocket
s
)
{
srv
=
s
;
}
System
.
out
.
println
(
"read "
+
len
+
" bytes"
);
}
static
class
CallBack
extends
AbstractCallback
{
void
readOneRequest
(
InputStream
is
)
throws
IOException
{
int
requestEndCount
=
0
,
r
;
while
((
r
=
is
.
read
())
!=
-
1
)
{
if
(
r
==
requestEnd
[
requestEndCount
])
{
requestEndCount
++;
if
(
requestEndCount
==
4
)
{
break
;
}
}
else
{
requestEndCount
=
0
;
}
}
}
public
void
run
()
{
try
(
Socket
s
=
srv
.
accept
())
{
// read HTTP request from client
readOneRequest
(
s
.
getInputStream
());
try
(
OutputStreamWriter
ow
=
new
OutputStreamWriter
((
s
.
getOutputStream
())))
{
FileInputStream
fin
=
new
FileInputStream
(
"foo1.jar"
);
int
length
=
fin
.
available
();
byte
[]
b
=
new
byte
[
length
-
10
];
fin
.
read
(
b
,
0
,
length
-
10
);
ow
.
write
(
"HTTP/1.0 200 OK\r\n"
);
// Note: The client expects length bytes.
ow
.
write
(
"Content-Length: "
+
length
+
"\r\n"
);
ow
.
write
(
"Content-Type: text/html\r\n"
);
ow
.
write
(
"\r\n"
);
public
void
request
(
HttpTransaction
req
,
int
count
)
{
try
{
System
.
out
.
println
(
"Request received"
);
req
.
setResponseEntityBody
(
new
FileInputStream
(
"foo1.jar"
));
System
.
out
.
println
(
"content length "
+
req
.
getResponseHeader
(
"Content-length"
));
req
.
sendPartialResponse
(
200
,
"Ok"
);
req
.
abortiveClose
();
// Note: The (buggy) server only sends length-10 bytes.
ow
.
write
(
new
String
(
b
));
ow
.
flush
();
}
}
catch
(
IOException
e
)
{
e
.
printStackTrace
();
}
}
}
};
static
HttpServer
server
;
static
void
read
(
InputStream
is
)
throws
IOException
{
int
c
,
len
=
0
;
while
((
c
=
is
.
read
())
!=
-
1
)
{
len
+=
c
;
}
System
.
out
.
println
(
"read "
+
len
+
" bytes"
);
}
public
static
void
main
(
String
[]
args
)
throws
Exception
{
String
tmpdir
=
System
.
getProperty
(
"java.io.tmpdir"
);
String
[]
list1
=
listTmpFiles
(
tmpdir
);
//server = new HttpServer (new CallBack(), 10, 1, 0);
server
=
new
HttpServer
(
new
CallBack
(),
1
,
5
,
0
);
int
port
=
server
.
getLocalPort
();
ServerSocket
serverSocket
=
new
ServerSocket
(
0
);
server
=
new
Server
(
serverSocket
);
server
.
start
();
int
port
=
serverSocket
.
getLocalPort
();
System
.
out
.
println
(
"Server: listening on port: "
+
port
);
URL
url
=
new
URL
(
"jar:http://localhost:"
+
port
+
"!/COPYRIGHT"
);
try
{
...
...
@@ -81,14 +108,12 @@ public class B4957695 {
}
catch
(
IOException
e
)
{
System
.
out
.
println
(
"Received IOException as expected"
);
}
server
.
terminate
();
String
[]
list2
=
listTmpFiles
(
tmpdir
);
if
(!
sameList
(
list1
,
list2
))
{
throw
new
RuntimeException
(
"some jar_cache files left behind"
);
}
}
static
String
[]
listTmpFiles
(
String
d
)
{
File
dir
=
new
File
(
d
);
return
dir
.
list
(
new
FilenameFilter
()
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录