From b26992411a2a9bc17ed022d8a67502654c3bce8e Mon Sep 17 00:00:00 2001 From: wangjiashuo <1443062665@qq.com> Date: Sun, 31 May 2026 13:32:25 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=20w8=20=E6=B3=9B=E5=9E=8B?= =?UTF-8?q?=E7=BB=83=E4=B9=A0=EF=BC=88Pair=20=E4=B8=8E=20Cache=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- w8/Cache.class | Bin 0 -> 2322 bytes w8/Cache.java | 50 +++++++++++++++++++++++++++++++++++++++++++++++ w8/Pair.class | Bin 0 -> 1981 bytes w8/Pair.java | 46 +++++++++++++++++++++++++++++++++++++++++++ w8/思考题.txt | 15 ++++++++++++++ 5 files changed, 111 insertions(+) create mode 100644 w8/Cache.class create mode 100644 w8/Cache.java create mode 100644 w8/Pair.class create mode 100644 w8/Pair.java create mode 100644 w8/思考题.txt diff --git a/w8/Cache.class b/w8/Cache.class new file mode 100644 index 0000000000000000000000000000000000000000..d5e47bf81851c43aee01c8ae73c67078a1950904 GIT binary patch literal 2322 zcmah~ZBrXn6n-vmn{1Xs1C-LzHwrWfZPV7b+8}CUkqDG(FtoJ3EMXfKlHHiypj7?V ze(2~RGx`DBamEiFtD}z9sVM}eKfvG7!1R;{re{?w?!Ps z2>~Z11aWGMXe;-KW-19K!ywGd$*eMVonenJQXIdd5#mPAa8jRRI94U(O0N7d7ha$k zHojXd+`a3@OE@dwWeMjHD(Q&mf?+Bt3SH-=X|oNfdhk+4)y$}wQRI~6yequP z?~w5_qxOV_{4s8*$4iqq!3|yJY9*!JPQZgMFKRKt;Et*ZO*XR`YNd9&64pS{Wc7~^ zhsI-}0V-ZySf3_^rV&+BE@o3xN@iT1N|MCwvz7cY1{Xj32|Q*htCz=I4Q-d$ObCa7{sWa&BT>Kl?NqSUyPHyF4Q#Vb=@?~jGP`-%o%;! zaAB5;X3xpyotuT#hfg2h{CoWlb0Nvlxw-yz;n(Gj<=+ZRKNP;aRapAjE|RT5DID6o zzxMRodv=o-mKJS5;okkigRg9*G(*S6%B{_x@>Q;z8julTz!Z?>Rhnn$wmQffPgR@O z=aisLjNPPza@^E2^xar49zsXa&S^;2rjv@%J)-M#*>v%T&0)BRvJ&9y zp#3WStHCw6=uGbpt?!ZK6ty;^y*cm*EU*UQ$|Jb{g!sFKeV^7{qyc(s>Im5cH)+#n zjx2GspYHf=W8fjgzT>NCra{?(@`nzP=-24D|A651J~;5Bv~vxQ1z*LU8a$xC4BRh| zkm7QHAJRX1AD#i+SA$>5fUOQtCLnzV9H7tfC^;Sv()^dlyO*fzaL`kPrZ{ZYp&zS}2EuRN^xTAWV;B1SfErUYBdsG;=sj4Pm#Gg6o8-K>{ { + private final Map cache; + + public Cache() { + this.cache = new HashMap<>(); + } + + public void put(K key, V value) { + cache.put(key, value); + } + + public V get(K key) { + return cache.get(key); + } + + public boolean containsKey(K key) { + return cache.containsKey(key); + } + + public void remove(K key) { + cache.remove(key); + } + + public void clear() { + cache.clear(); + } + + public int size() { + return cache.size(); + } + + public static void main(String[] args) { + Cache studentCache = new Cache<>(); + + studentCache.put("张三", 18); + studentCache.put("李四", 20); + + System.out.println("张三的年龄:" + studentCache.get("张三")); + System.out.println("缓存是否包含王五:" + studentCache.containsKey("王五")); + + studentCache.remove("李四"); + System.out.println("移除李四后缓存大小:" + studentCache.size()); + + studentCache.clear(); + System.out.println("清空后缓存大小:" + studentCache.size()); + } +} diff --git a/w8/Pair.class b/w8/Pair.class new file mode 100644 index 0000000000000000000000000000000000000000..e8b070cf79de3ad4cd4ddc059114cb96e8e2bcc0 GIT binary patch literal 1981 zcmaJ?ZF3V<6n<`-W|NT6l9m<(3X}qQgD9vVX)6+`)CO8j4FbMx+chjrb~D*cosQ!- zzxV;ikBlE3e}Fo?Ssi|WzeAkylmEc+xx1HS^D<6n&i0;r&U2pg+;eaK_;>difUD4B z7{aiIP#hx&3yj^Tz*Jq|GK#jfp}RLt_b&f)T-|aVfr~*fmD!Iq06v046yf==5C4Albqq%^ zt>LI-e@tLsr{N{bHL3=+m`p7NL6pA`qY^VxJ;8?@r3sK$)=rOrGzeIhixGrvOMF}K9C1Qk# z6*-Z9vSborvT`xZFC1}gzq8)bs$cT2>n6pROx+2bVOtG>xw+*_fgQ!AGQhXcA0`kh z+pXq?v1odd$oqCy9t+3eify}&+teG^4fn3S=|r$fk}~2;-p6^7JLcV_dGS>Q?+YaU z-2L&d`#(JY=Kepwe=j0f>$txAR=P&R;NjiGhZ=6lxw$Pc+Zk}v+P1fhyx*9A!xr@o z*KYDq9s~zL1^T3}>DFe=aAr%kz13<2r(7u%Xt^tKZKq)j2oGxf;#B(~ih8Y9HeG{f z8eg(3qgkx!j$=3)J{CCH*V7=X8a@@6{{K);liwGPbLNNm3=Q#*4ml$!L-(h}7GfyBg*+7HPwn)u=iH-G-sI{s-cl(u{7TMYuWqNL{6!!m79CT0SD05ESSrz5YFwqf z&6KNyO9i^~OHHxV0hPDNJiZ*XQl1Nn;<)Upl%Y*XiKtTm#Fyw0K@KCq_c@7aroV%0 z3M5AmDb0igd5STK!p|-yfnNGE6nP2ns?6JzU21XeH$-kFUmBZuio;KEyz~oZvmQbQ zc#JdI$2i}1z3#a>YEF_Dkfxp)^2%ZcIX { + private K key; + private V value; + + public Pair(K key, V value) { + this.key = key; + this.value = value; + } + + public K getKey() { + return key; + } + + public void setKey(K key) { + this.key = key; + } + + public V getValue() { + return value; + } + + public void setValue(V value) { + this.value = value; + } + + public void swap() { + Object temp = key; + key = (K) value; + value = (V) temp; + } + + @Override + public String toString() { + return "Pair{" + + "key=" + key + + ", value=" + value + + '}'; + } + + public static void main(String[] args) { + Pair pair = new Pair<>("年龄", 20); + System.out.println("交换前:" + pair); + pair.swap(); + System.out.println("交换后:" + pair); + } +} diff --git a/w8/思考题.txt b/w8/思考题.txt new file mode 100644 index 0000000..6a010f8 --- /dev/null +++ b/w8/思考题.txt @@ -0,0 +1,15 @@ +为什么Java泛型不支持基本类型? + +核心原因是Java泛型的类型擦除机制,以及基本类型和引用类型的存储方式差异,具体分为以下几点: + +1. 类型擦除导致的兼容问题 +Java泛型在编译后会被擦除为  Object (或上界类型),而基本类型(如  int 、 double )不是  Object  的子类,无法直接赋值给  Object 。如果允许泛型使用基本类型,擦除后的代码会出现类型不匹配的问题。 +​ +2. 自动装箱/拆箱的本质 +虽然我们可以用  List  间接实现“存储int”的效果,但这并不是直接支持基本类型,而是利用了自动装箱(autoboxing)机制:编译器会自动将  int  转换为  Integer (包装类),本质上存储的还是引用类型。 +​ +3. 内存模型差异 +基本类型存储在栈中,占用固定大小的内存(如  int  占4字节);而引用类型存储在堆中,栈中仅保存对象的引用。如果泛型直接支持基本类型,JVM需要为每个基本类型生成不同的类实现,会导致类爆炸,违背了泛型“一份代码,多种类型”的设计初衷。 +​ +4. 历史兼容考虑 +Java泛型是在JDK 1.5引入的,为了兼容之前的非泛型代码(如  ArrayList ),采用了擦除实现。如果直接支持基本类型,会打破这种向后兼容性,导致旧代码无法运行。 \ No newline at end of file