C# 中List<Hashtable 如何快速判断是否已经存在

另外 List 这种写法是否正确 或者 这样HashSet
我每次往List中添加HashTable 对象需要判断是否重复 谢谢

没分了 还请见谅

c#

2个回答

        HashSet<Hashtable> lstHstb = new HashSet<Hashtable>();
                    List<Hashtable> lstHstb = new List<Hashtable>();
                    上面自动吧<> 屏蔽了
                    另外 List 这种写法是否正确 或者 这样HashSet

Dictionary<TK, TV>,这样如果你添加重复的键值,就会丢出异常。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
C#中关于集合类的一个问题
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Collections; namespace ConsoleApplication1 { public class Cards { Hashtable htCards; ArrayList randomList; public Hashtable SetCards() //哈希表添加54张牌 { htCards = new Hashtable(54, 1); int i; string card = ""; for (i = 1; i <= 13; i++) { if (i <= 10) { card = "红桃" + i.ToString(); } else { switch (i) { case 11: card = "红桃J"; break; case 12: card = "红桃Q"; break; case 13: card = "红桃K"; break; } } htCards.Add(i, card); } for (i = 14; i <= 26; i++) { if (i <= 23) { card = "黑桃" + (i - 13).ToString(); } else { switch (i) { case 24: card = "黑桃J"; break; case 25: card = "黑桃Q"; break; case 26: card = "黑桃K"; break; } } htCards.Add(i, card); } for (i = 27; i <= 39; i++) { if (i <= 36) { card = "方片" + (i - 26).ToString(); } else { switch (i) { case 37: card = "方片J"; break; case 38: card = "方片Q"; break; case 39: card = "方片K"; break; } } htCards.Add(i, card); } for (i = 40; i <= 52; i++) { if (i <= 49) { card = "梅花" + (i - 39).ToString(); } else { switch (i) { case 50: card = "梅花J"; break; case 51: card = "梅花Q"; break; case 52: card = "梅花K"; break; } } htCards.Add(i, card); } htCards.Add(53, "小王"); htCards.Add(54, "大王"); return htCards; } public ArrayList SendCards() //发牌,生成13个不重复的随机数 { randomList = new ArrayList(); Random r = new Random(); for (int j = 0; j < 13; j++) { int index; index = r.Next(1, 54); htCards.Remove(index); while (!htCards.Contains (index)||randomList.Contains(index)) { index = r.Next(1, 54); } randomList.Add(index); } return randomList; } } class Program { static void Main(string[] args) { Cards cards = new Cards(); Hashtable hxCards = cards.SetCards(); int count = 0; for (int i = 0; i < 2; i++) { ArrayList indexList = cards.SendCards(); Console.WriteLine("第{0}位玩家的牌已发,如下:",i+1); foreach (int index in indexList) { if (count % 5 == 0) { Console.WriteLine(); } count++; Console.Write("{0}\t", hxCards[index]); } Console.WriteLine(); } Console.ReadLine(); } } } 程序用VS运行出来各种问题!!!各位大神帮我看看。![图片说明](https://img-ask.csdn.net/upload/201505/06/1430926576_137800.jpg)
C# 中的hashtabled的Count值和实际的值不一样是什么原因?
目前在一个Web项目用Hashtable缓存在线人数,但是发现Hashtable的Count值和实际的值有些不一样。 通过遍历输出的值的个数和Hashtable的Count值不一样。 请问这个主要是什么原因引起的?
C#仿QQ聊天的代码。在打开聊天窗口并输入聊天内容执行发送时,程序报错
这是一段仿QQ聊天的代码。在打开聊天窗口并输入聊天内容执行发送时,程序报错: 参数化查询 '(@FromUserId int,@ToUserId int,@Message nvarchar(1),@MessageType' 需要参数 '@MessageState',但未提供该参数。 错误详细信息为: 未处理 System.Data.SqlClient.SqlException Message="参数化查询 '(@FromUserId int,@ToUserId int,@Message nvarchar(1),@MessageType' 需要参数 '@MessageState',但未提供该参数。" Source=".Net SqlClient Data Provider" ErrorCode=-2146232060 Class=16 LineNumber=0 Number=8178 Procedure="" Server="(local)" State=1 StackTrace: 在 System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection) 在 System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection) 在 System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj) 在 System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj) 在 System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString) 在 System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async) 在 System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, DbAsyncResult result) 在 System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(DbAsyncResult result, String methodName, Boolean sendToPipe) 在 System.Data.SqlClient.SqlCommand.ExecuteNonQuery() 在 DAL.SqlHelper.ExecuteNonQuery(String connectionString, CommandType cmdType, String cmdText, SqlParameter[] commandParameters) 位置 D:\BOOK\C#_code\project\QQ2010\DAL\SQLHelper.cs:行号 54 在 DAL.MessagesDAL.Insert(MessagesInfo entity) 位置 D:\BOOK\C#_code\project\QQ2010\DAL\MessagesDAL.cs:行号 122 在 BLL.Messages.SendMessage(MessagesInfo entity, EnumMessageType messageType) 位置 D:\BOOK\C#_code\project\QQ2010\BLL\Messages.cs:行号 84 在 MyQQ.frmChat.btnSend_Click(Object sender, EventArgs e) 位置 D:\BOOK\C#_code\project\QQ2010\MyQQ\frmChat.cs:行号 77 在 System.Windows.Forms.Control.OnClick(EventArgs e) 在 System.Windows.Forms.Button.OnClick(EventArgs e) 在 System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent) 在 System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks) 在 System.Windows.Forms.Control.WndProc(Message& m) 在 System.Windows.Forms.ButtonBase.WndProc(Message& m) 在 System.Windows.Forms.Button.WndProc(Message& m) 在 System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m) 在 System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m) 在 System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam) 在 System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg) 在 System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(Int32 dwComponentID, Int32 reason, Int32 pvLoopData) 在 System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context) 在 System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context) 在 System.Windows.Forms.Application.Run(Form mainForm) 在 MyQQ.Program.Main() 位置 D:\BOOK\C#_code\project\QQ2010\MyQQ\Program.cs:行号 17 在 System.AppDomain._nExecuteAssembly(Assembly assembly, String[] args) 在 System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args) 在 Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly() 在 System.Threading.ThreadHelper.ThreadStart_Context(Object state) 在 System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) 在 System.Threading.ThreadHelper.ThreadStart() InnerException: 具体代码如下: using System; using System.Configuration; using System.Data; using System.Data.SqlClient; using System.Collections; namespace DAL { public class SqlHelper { public static readonly string ConnString = ConfigurationManager.ConnectionStrings["SQLConnString"].ConnectionString; // Hashtable to store cached parameters private static Hashtable parmCache = Hashtable.Synchronized(new Hashtable()); public static int ExecuteNonQuery(string connectionString, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters) { SqlCommand cmd = new SqlCommand(); using (SqlConnection conn = new SqlConnection(connectionString)) { PrepareCommand(cmd, conn, null, cmdType, cmdText, commandParameters); int val = cmd.ExecuteNonQuery(); cmd.Parameters.Clear(); return val; } } public static int ExecuteNonQuery(SqlConnection connection, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters) { SqlCommand cmd = new SqlCommand(); PrepareCommand(cmd, connection, null, cmdType, cmdText, commandParameters); int val = cmd.ExecuteNonQuery(); cmd.Parameters.Clear(); return val; } public static int ExecuteNonQuery(SqlTransaction trans, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters) { SqlCommand cmd = new SqlCommand(); PrepareCommand(cmd, trans.Connection, trans, cmdType, cmdText, commandParameters); int val = cmd.ExecuteNonQuery(); cmd.Parameters.Clear(); return val; } public static SqlDataReader ExecuteReader(string connectionString, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters) { SqlCommand cmd = new SqlCommand(); SqlConnection conn = new SqlConnection(connectionString); try { PrepareCommand(cmd, conn, null, cmdType, cmdText, commandParameters); SqlDataReader rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection); cmd.Parameters.Clear(); return rdr; } catch { conn.Close(); throw; } } public static object ExecuteScalar(string connectionString, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters) { SqlCommand cmd = new SqlCommand(); using (SqlConnection connection = new SqlConnection(connectionString)) { PrepareCommand(cmd, connection, null, cmdType, cmdText, commandParameters); object val = cmd.ExecuteScalar(); cmd.Parameters.Clear(); return val; } } public static object ExecuteScalar(SqlConnection connection, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters) { SqlCommand cmd = new SqlCommand(); PrepareCommand(cmd, connection, null, cmdType, cmdText, commandParameters); object val = cmd.ExecuteScalar(); cmd.Parameters.Clear(); return val; } public static void CacheParameters(string cacheKey, params SqlParameter[] commandParameters) { parmCache[cacheKey] = commandParameters; } public static SqlParameter[] GetCachedParameters(string cacheKey) { SqlParameter[] cachedParms = (SqlParameter[])parmCache[cacheKey]; if (cachedParms == null) return null; SqlParameter[] clonedParms = new SqlParameter[cachedParms.Length]; for (int i = 0, j = cachedParms.Length; i < j; i++) clonedParms[i] = (SqlParameter)((ICloneable)cachedParms[i]).Clone(); return clonedParms; } private static void PrepareCommand(SqlCommand cmd, SqlConnection conn, SqlTransaction trans, CommandType cmdType, string cmdText, SqlParameter[] cmdParms) { if (conn.State != ConnectionState.Open) conn.Open(); cmd.Connection = conn; cmd.CommandText = cmdText; if (trans != null) cmd.Transaction = trans; cmd.CommandType = cmdType; if (cmdParms != null) { foreach (SqlParameter parm in cmdParms) cmd.Parameters.Add(parm); } } } } 请教高手如何解决?谢谢。
C# 最短路径问题,取出最短路径Node编号
我参考[最短路径](http://www.cnblogs.com/zhuweisky/archive/2006/03/26/246677.html "")网页的代码实现寻找最短路径。 请问,如何将result中的passNodeID取出来并赋值到新数组? 谢谢大家!! 代码如下 public class Edge { public string StartNodeID; public string EndNodeID; public double Weight; //权值,代价 } public class Node { private string iD; private ArrayList edgeList;//Edge的集合--出边表 public Node(string id) { this.iD = id; this.edgeList = new ArrayList(); } #region property public string ID { get { return this.iD; } } public ArrayList EdgeList { get { return this.edgeList; } } #endregion } /// <summary> /// PassedPath 用于缓存计算过程中的到达某个节点的权值最小的路径 /// </summary> public class PassedPath { private string curNodeID; private bool beProcessed; //是否已被处理 private double weight; //累积的权值 private ArrayList passedIDList; //路径 public PassedPath(string ID) { this.curNodeID = ID; this.weight = double.MaxValue; this.passedIDList = new ArrayList(); this.beProcessed = false; } #region property public bool BeProcessed { get { return this.beProcessed; } set { this.beProcessed = value; } } public string CurNodeID { get { return this.curNodeID; } } public double Weight { get { return this.weight; } set { this.weight = value; } } public ArrayList PassedIDList { get { return this.passedIDList; } } #endregion } /// <summary> /// PlanCourse 缓存从源节点到其它任一节点的最小权值路径=》路径表 /// </summary> public class PlanCourse { private Hashtable htPassedPath; #region ctor public PlanCourse(ArrayList nodeList, string originID) { this.htPassedPath = new Hashtable(); Node originNode = null; foreach (Node node in nodeList) { if (node.ID == originID) { originNode = node; } else { PassedPath pPath = new PassedPath(node.ID); this.htPassedPath.Add(node.ID, pPath); } } if (originNode == null) { throw new Exception("The origin node is not exist !"); } this.InitializeWeight(originNode); } private void InitializeWeight(Node originNode) { if ((originNode.EdgeList == null) || (originNode.EdgeList.Count == 0)) { return; } foreach (Edge edge in originNode.EdgeList) { PassedPath pPath = this[edge.EndNodeID]; if (pPath == null) { continue; } pPath.PassedIDList.Add(originNode.ID); pPath.Weight = edge.Weight; } } #endregion public PassedPath this[string nodeID] { get { return (PassedPath)this.htPassedPath[nodeID]; } } } public class RoutePlanResult { public string[] passNodeID; //通过的点的ID public double pPathWeirht; //路径的权值 public RoutePlanResult(string[] passID, double weight) { passNodeID = passID; pPathWeirht = weight; } } /// <summary> /// RoutePlanner 提供图算法中常用的路径规划功能。 /// 2005.09.06 /// </summary> public class RoutePlanner { public RoutePlanner() { } #region Paln //获取权值最小的路径 public RoutePlanResult Paln(ArrayList nodeList, string originID, string destID) { PlanCourse planCourse = new PlanCourse(nodeList, originID); Node curNode = this.GetMinWeightRudeNode(planCourse, nodeList, originID); #region 计算过程 while (curNode != null) { PassedPath curPath = planCourse[curNode.ID]; foreach (Edge edge in curNode.EdgeList) { if (edge.EndNodeID == originID) continue; PassedPath targetPath = planCourse[edge.EndNodeID]; double tempWeight = curPath.Weight + edge.Weight; if (tempWeight < targetPath.Weight) { targetPath.Weight = tempWeight; targetPath.PassedIDList.Clear(); for (int i = 0; i < curPath.PassedIDList.Count; i++) { targetPath.PassedIDList.Add(curPath.PassedIDList[i].ToString()); } targetPath.PassedIDList.Add(curNode.ID); } } //标志为已处理 planCourse[curNode.ID].BeProcessed = true; //获取下一个未处理节点 curNode = this.GetMinWeightRudeNode(planCourse, nodeList, originID); } #endregion //表示规划结束 return this.GetResult(planCourse, destID); } #endregion #region private method #region GetResult //从PlanCourse表中取出目标节点的PassedPath,这个PassedPath即是规划结果 private RoutePlanResult GetResult(PlanCourse planCourse, string destID) { PassedPath pPath = planCourse[destID]; if (pPath.Weight == int.MaxValue) { RoutePlanResult result1 = new RoutePlanResult(null, int.MaxValue); return result1; } string[] passedNodeIDs = new string[pPath.PassedIDList.Count]; for (int i = 0; i < passedNodeIDs.Length; i++) { passedNodeIDs[i] = pPath.PassedIDList[i].ToString(); } RoutePlanResult result = new RoutePlanResult(passedNodeIDs, pPath.Weight); return result; } #endregion #region GetMinWeightRudeNode //从PlanCourse取出一个当前累积权值最小,并且没有被处理过的节点 private Node GetMinWeightRudeNode(PlanCourse planCourse, ArrayList nodeList, string originID) { double weight = double.MaxValue; Node destNode = null; foreach (Node node in nodeList) { if (node.ID == originID) { continue; } PassedPath pPath = planCourse[node.ID]; if (pPath.BeProcessed) { continue; } if (pPath.Weight < weight) { weight = pPath.Weight; destNode = node; } } return destNode; } #endregion #endregion } //[STAThread] static void Main(string[] args) { ArrayList nodeList = new ArrayList(); //***************** A Node ******************* Node aNode = new Node("A"); nodeList.Add(aNode); //A -> B Edge aEdge1 = new Edge(); aEdge1.StartNodeID = aNode.ID; aEdge1.EndNodeID = "B"; aEdge1.Weight = 10; aNode.EdgeList.Add(aEdge1); //A -> C Edge aEdge2 = new Edge(); aEdge2.StartNodeID = aNode.ID; aEdge2.EndNodeID = "C"; aEdge2.Weight = 20; aNode.EdgeList.Add(aEdge2); //A -> E Edge aEdge3 = new Edge(); aEdge3.StartNodeID = aNode.ID; aEdge3.EndNodeID = "E"; aEdge3.Weight = 30; aNode.EdgeList.Add(aEdge3); //***************** B Node ******************* Node bNode = new Node("B"); nodeList.Add(bNode); //B -> C Edge bEdge1 = new Edge(); bEdge1.StartNodeID = bNode.ID; bEdge1.EndNodeID = "C"; bEdge1.Weight = 5; bNode.EdgeList.Add(bEdge1); //B -> E Edge bEdge2 = new Edge(); bEdge2.StartNodeID = bNode.ID; bEdge2.EndNodeID = "E"; bEdge2.Weight = 10; bNode.EdgeList.Add(bEdge2); //***************** C Node ******************* Node cNode = new Node("C"); nodeList.Add(cNode); //C -> D Edge cEdge1 = new Edge(); cEdge1.StartNodeID = cNode.ID; cEdge1.EndNodeID = "D"; cEdge1.Weight = 30; cNode.EdgeList.Add(cEdge1); //***************** D Node ******************* Node dNode = new Node("D"); nodeList.Add(dNode); //***************** E Node ******************* Node eNode = new Node("E"); nodeList.Add(eNode); //C -> D Edge eEdge1 = new Edge(); eEdge1.StartNodeID = eNode.ID; eEdge1.EndNodeID = "D"; eEdge1.Weight = 20; eNode.EdgeList.Add(eEdge1); RoutePlanner planner = new RoutePlanner(); RoutePlanResult result = planner.Paln(nodeList, "A", "D"); planner = null; ``` ```
c# 利用MarshalByRefObject完成Remoting,失败了,来个大神帮一下
我在一个项目中定义了一个类Msg ``` public class Msg : MarshalByRefObject { public int TestInt{ get; set; } public string TestStr { get; set; } public int TestMothedResult { get; private set; } public void TestMothed() { TestMothedResult++; } } ``` 然后在另外的一个Winform项目中作为Servo, ``` using System; using System.Collections; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Runtime.Remoting; using System.Runtime.Remoting.Channels; using System.Runtime.Remoting.Channels.Tcp; using System.Runtime.Serialization.Formatters; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace RemotingTest { public partial class Servo : Form { RemotingObject.Msg Msg { get; set; } = new RemotingObject.Msg(); public Servo() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { // ------------------------------------------------------------ BinaryServerFormatterSinkProvider serverProv = new BinaryServerFormatterSinkProvider(); serverProv.TypeFilterLevel = TypeFilterLevel.Full; IDictionary propBag = new Hashtable(); // ----------------------------------------- propBag["port"] = 6666; propBag["typeFilterLevel"] = TypeFilterLevel.Full; propBag["name"] = "RemotingObject.Msg"; TcpChannel channel = new TcpChannel(propBag, null, serverProv); ChannelServices.RegisterChannel(channel); RemotingConfiguration.RegisterWellKnownServiceType(typeof(RemotingObject.Msg), "RemotingObject.Msg", WellKnownObjectMode.Singleton); } void timer1_Tick(object sender, EventArgs e) { nud_Read.Value = Msg.TestMothedResult; } void button1_Click(object sender, EventArgs e) { Msg.TestMothed(); } } } ``` 又在另外的一个Winform项目中作为Client, ``` using System; using System.Collections; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Runtime.Remoting; using System.Runtime.Remoting.Channels; using System.Runtime.Remoting.Channels.Tcp; using System.Runtime.Serialization.Formatters; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace RemotingClient { public partial class Client : Form { RemotingObject.Msg Msg { get; set; } public Client() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { string Url = "tcp://localhost:6666/RemotingObject.Msg"; object temp = Activator.GetObject(typeof(RemotingObject.Msg), Url); if (temp is RemotingObject.Msg) { Msg = temp as RemotingObject.Msg; } } private void timer1_Tick(object sender, EventArgs e) { if (Msg != null) { txt_Read.Text = Msg.TestStr; nud_Read.Value = Msg.TestMothedResult; } } private void button1_Click(object sender, EventArgs e) { if (Msg != null) { Msg.TestMothed(); } } } } ``` 无论是服务端还是客户端,我的界面都是这个样子: ![图片说明](https://img-ask.csdn.net/upload/201907/09/1562655709_738640.png) 我的目的,是在无论服务端还是客户端进行修改时,对方也能被修改(简单说就是类似同一个实例);可事实上是 程序运行不报错,断点跟踪也是正常设置与监控,但就是各管各的!
link中如何使用HashTable来提高循环的效率?
link中如何使用HashTable来提高循环的效率?
有关Hashtable创建树的问题
用Hashtable创建的树怎样实现监听呢?如果有代码提供更好,谢谢
link中如何用HashTable来遍历列表,或者有什么办法能提高循环的效率?
link中如何用HashTable来遍历列表,或者有什么办法能提高循环的效率?
hashtable如何在不修改Key的情况下修改value
if(ht.get(key)!=0){ ht.put(key, 0); count--; } 当键值满足要求后,在不修改键值的情况下如何修value
哪位能详细告知HashMap和HashTable的区别?
在面试的时候HashMap和HashTable的区别?在面试的时候HashMap和HashTable的区别?
关于Hashtable线程安全的疑问
很多地方都会描述java的Hashtable是线程安全的,为什么在两个线程中操作同一个Hashtable,如果不加同步代码,总报异常?代码如下: ``` package com.HanyouChina.ThreadTest; import java.util.Hashtable; import java.util.Iterator; import java.util.Map; class MusicThread extends java.lang.Thread{ public Hashtable<String, Integer> objtrdHashtable = null; @Override public void run() { Iterator<Map.Entry<String, Integer>> it = objtrdHashtable.entrySet().iterator(); while (it.hasNext()) { try { Thread.sleep(10); } catch (InterruptedException e) { e.printStackTrace(); } Map.Entry<String,Integer> entry=(Map.Entry<String,Integer>)it.next(); System.out.println(entry.getKey()+"--"+entry.getValue()); if(entry.getValue()%2 == 0) it.remove(); } } } class GameThread extends java.lang.Thread{ public Hashtable<String, Integer> objtrdHashtable = null; @Override public void run() { for(Map.Entry<String, Integer> item : objtrdHashtable.entrySet()) { try { Thread.sleep(10); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(item); } } } public class ThreadApp { public static Hashtable<String, Integer> objHashtable = new Hashtable<>(); public static void main(String[] args) { for(int i=0;i<50;i++) objHashtable.put(String.valueOf(i), i); MusicThread thdMusic = new MusicThread(); thdMusic.objtrdHashtable = objHashtable; thdMusic.start(); GameThread thdGame = new GameThread(); thdGame.objtrdHashtable = objHashtable; thdGame.start(); } } ``` 异常截图 ![图片说明](https://img-ask.csdn.net/upload/201909/25/1569400132_78164.jpg)
java Hashtable冲突问题
我用Hashtable如果存进两个hashcode一样的元素发生了冲突,查了一下如果冲突的话好像是以链表的方式实现了,那么我具体用什么方法可以把这两个元素都get到呢?
Hashtable源码 key value是否为null
在看Hashtable源码 其中 [code="java"] public synchronized V put(K key, V value) { // Make sure the value is not null if (value == null) { throw new NullPointerException(); } // Makes sure the key is not already in the hashtable. 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; return old; } } modCount++; if (count >= threshold) { // Rehash the table if the threshold is exceeded rehash(); tab = table; index = (hash & 0x7FFFFFFF) % tab.length; } // Creates the new entry. Entry<K,V> e = tab[index]; tab[index] = new Entry<K,V>(hash, key, value, e); count++; return null; } [/code] 代码第10行 [color=red]如果key为空这里会nullPointer...为什么不像value一样判断下 再抛异常呢[/color] 看的比较浅 请问Hashtable key/value不能为null还有其他因素么?谢谢了
webapi 传入 HashTable的参数,为空
$.ajax({ type: "POST", url: routes.address.ShoppingbucaoList, dataType: 'application/JSON', data: { "pageNumStart":"0","pageNumEnd":"5","sqlParam":{"MermberID":"001"},"orderBy":"createtime desc" } ajax 调用接口,传入参数 sqlParam 为HashTable ![图片说明](https://img-ask.csdn.net/upload/201709/04/1504500122_684362.png) 接口中收到的是null。 有没有大佬知道这是什么问题,怎么解决
java set集合快速查找?
看书说散列集(表)即hashtable可以快速查找元素。但是据我所知,hashset并没有查找元素的方法。<br/> 如果要快速找到一个元素,首先要获得该元素的hashcode,但是我也没见过什么保存hashcode的代码。<br/> 只有获得这个元素的前提下才能计算出它的hashcode,可是我都获得这个元素了,还要去集合里面查找干嘛?
java Hashtable是按照怎样的一种顺序输出元素
我发现TreeMap比HashMap,Hashtable多了个可以设置排序规则(Comparator)的构造函数。 那么TreeMap是按照怎样的顺序输出元素的呢? 还有,是不是带hash的数据结构都是基于数组实现的? 谢谢!
项目复制到另一台电脑中,重新生成时出现如下错误.何解?
错误 3 “GenerateResource”任务意外失败。 System.Runtime.InteropServices.ExternalException: GDI+ 中发生一般性错误。 在 System.Drawing.Image.Save(Stream stream, ImageCodecInfo encoder, EncoderParameters encoderParams) 在 System.Drawing.Image.Save(MemoryStream stream) 在 System.Drawing.Image.System.Runtime.Serialization.ISerializable.GetObjectData(SerializationInfo si, StreamingContext context) 在 System.Runtime.Serialization.Formatters.Binary.WriteObjectInfo.InitSerialize(Object obj, ISurrogateSelector surrogateSelector, StreamingContext context, SerObjectInfoInit serObjectInfoInit, IFormatterConverter converter, ObjectWriter objectWriter) 在 System.Runtime.Serialization.Formatters.Binary.WriteObjectInfo.Serialize(Object obj, ISurrogateSelector surrogateSelector, StreamingContext context, SerObjectInfoInit serObjectInfoInit, IFormatterConverter converter, ObjectWriter objectWriter) 在 System.Runtime.Serialization.Formatters.Binary.ObjectWriter.Serialize(Object graph, Header[] inHeaders, __BinaryWriter serWriter, Boolean fCheck) 在 System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Serialize(Stream serializationStream, Object graph, Header[] headers, Boolean fCheck) 在 System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Serialize(Stream serializationStream, Object graph) 在 System.Resources.ResourceWriter.WriteValue(ResourceTypeCode typeCode, Object value, BinaryWriter writer, IFormatter objFormatter) 在 System.Resources.ResourceWriter.Generate() 在 System.Resources.ResourceWriter.Dispose(Boolean disposing) 在 System.Resources.ResourceWriter.Close() 在 Microsoft.Build.Tasks.ProcessResourceFiles.WriteResources(IResourceWriter writer) 在 Microsoft.Build.Tasks.ProcessResourceFiles.WriteResources(String filename) 在 Microsoft.Build.Tasks.ProcessResourceFiles.ProcessFile(String inFile, String outFile) 在 Microsoft.Build.Tasks.ProcessResourceFiles.Run(TaskLoggingHelper log, ITaskItem[] assemblyFilesList, ArrayList inputs, ArrayList outputs, Boolean sourcePath, String language, String namespacename, String filename, String classname, Boolean publicClass) 在 Microsoft.Build.Tasks.GenerateResource.Execute() 在 Microsoft.Build.BuildEngine.TaskEngine.ExecuteTask(ExecutionMode howToExecuteTask, Hashtable projectItemsAvailableToTask, BuildPropertyGroup projectPropertiesAvailableToTask, Boolean& taskClassWasFound) GZ001
哈希查找程序中的几个问题
本人新手,接触到哈希查找,有几个问题看不懂,希望大家指点迷津,多谢。 #include"stdio.h" #include"malloc.h" //定义查找的节点元素 typedef struct { int num; char name[20]; }ElemType; //定义哈希表 typedef struct { ElemType *elem; int count; int sizeindex; }HashTable; //定义哈希函数 int Hash(int num) { int p; p=num%5; return p; } //创建哈希表 void InitHash(HashTable *H) { int i; int MAX=sizeof(HashTable); H->elem=(ElemType *)malloc(MAX*sizeof(ElemType)); H->count=0; H->sizeindex=MAX; for(i=0;i<MAX;i++) H->elem[i].num=0; //初始化,是SearHash()函数能够判断到底有没有元素在里面 } //定义查找函数 int SearHash(HashTable H,int key,int *p) { int c=0; *p=Hash(key); while(H.elem[*p].num!=key&&H.elem[*p].num!=0)//通过二次探测再散列解决冲突 { c=c+1; if(c%2==1) *p=*p+(c+1)*(c+1)/4; else *p=*p-(c*c)/4; } if(H.elem[*p].num==key) return 1; else return 0; } //插入函数 //如果查找不到就插入元素 void InsertHash(HashTable *H,ElemType e) { int p; SearHash(*H,e.num,&p); H->elem[p]=e; ++H->count; } //主函数 void main() { HashTable H; int p,key,i; ElemType e; InitHash(&H); for(i=0;i<3;i++) //输入3个元素 { loop:printf("输入第%d个学生学号\n",i+1); scanf("%d",&e.num); //输入学号 if(!SearHash(H,e.num,&p)) { printf("输入第%d个学生名字\n",i+1); scanf("%s",e.name); //输入名字 InsertHash(&H,e); //插入元素 } else { printf("该学号已经存在\n");//否则就表示元素的学号已经存在 goto loop;//跳到loop处 } } printf("请输入您要查找的学生学号:\n"); scanf("%d",&key);//输入要查找的学号 if(SearHash(H,key,&p))//能查找成功 { printf("查找成功!学生的姓名是%s\n\n",H.elem[p].name);//输出名字 printf("学生所在表中的位置是%d\n\n",p);//输出位置 } else printf("查找失败!您要找的学生不存在\n\n"); } 1. List item 这是一本讲算法的书中关于哈希查找算法的例子 有几个问题: 1.定义哈希表的结构体中,elem是一个指向结构体变量ElemType的指针,并不是数组,但是为什么会在后面的代码中出现像 H->elem[i].num=0;这样的语句? 2.定义哈希表的结构体中 count和sizeindex表示什么? 3.创建哈希表函数中的MAX是什么东西? 4.查找函数这段代码看不懂,关于c和p的处理是什么意思? while(H.elem[*p].num!=key&&H.elem[*p].num!=0)//通过二次探测再散列解决冲突 { c=c+1; if(c%2==1) *p=*p+(c+1)*(c+1)/4; else *p=*p-(c*c)/4; } if(H.elem[*p].num==key) return 1; else return 0; 5.插入函数中的p是什么?不需要初始化? void InsertHash(HashTable *H,ElemType e) { int p; SearHash(*H,e.num,&p); H->elem[p]=e; ++H->count; } 6.主函数中,p好像也没有初始化,但是可以使用p输出学生的名字和位置? if(SearHash(H,key,&p))//能查找成功 { printf("查找成功!学生的姓名是%s\n\n",H.elem[p].name);//输出名字 printf("学生所在表中的位置是%d\n\n",p);//输出位置 }
c语言结构体中,一个非常奇怪的现象。求解答
运行环境 codeblock 运行过程中,输入0-10或者为负数的时候,子函数与主函数输出没有问题,然后输入11及其以上的数字,子函数正确,主函数输出为-1. 最开始我以为是内存空间溢出的问题,把MAX改小后依然存在问题。 然后我把结构体定义int n提到前面,输出就没有问题了。 下面是代码: ``` #include <stdio.h> #define MAX 10 typedef struct HashNode *HashTable; struct HashNode { char data[MAX][MAX]; int t[MAX]; int n; }; HashTable CreatTable(int Size); //创建一个散列表, data为-1代表没有元素 int main(void) { HashTable h; int x; scanf("%d",&x); h = CreatTable(x); printf("out n is %d\n",h->n); } HashTable CreatTable(int Size) //创建一个散列表, data为-1代表没有元素 { HashTable h; int i; h = (HashTable)malloc(sizeof(struct HashNode)); if(h == NULL) { printf("malloc error\n"); exit(-1); } h->n = Size; printf("in n is %d\n",h->n); for(i = 0; i < Size; i++) h->t[i] = -1; return h; } ``` 错误运行案列: ![图片说明](https://img-ask.csdn.net/upload/201905/22/1558531968_291811.jpg) int n提前后 ``` #include <stdio.h> #define MAX 10 typedef struct HashNode *HashTable; struct HashNode { int n; char data[MAX][MAX]; int t[MAX]; }; HashTable CreatTable(int Size); //创建一个散列表, data为-1代表没有元素 ``` 运行如下 ![图片说明](https://img-ask.csdn.net/upload/201905/22/1558532142_360769.jpg) 求解答,感激不尽。
相见恨晚的超实用网站
搞学习 知乎:www.zhihu.com 简答题:http://www.jiandati.com/ 网易公开课:https://open.163.com/ted/ 网易云课堂:https://study.163.com/ 中国大学MOOC:www.icourse163.org 网易云课堂:study.163.com 哔哩哔哩弹幕网:www.bilibili.com 我要自学网:www.51zxw
爬虫福利二 之 妹子图网MM批量下载
爬虫福利一:27报网MM批量下载    点击 看了本文,相信大家对爬虫一定会产生强烈的兴趣,激励自己去学习爬虫,在这里提前祝:大家学有所成! 目标网站:妹子图网 环境:Python3.x 相关第三方模块:requests、beautifulsoup4 Re:各位在测试时只需要将代码里的变量 path 指定为你当前系统要保存的路径,使用 python xxx.py 或IDE运行即可。
字节跳动视频编解码面经
引言 本文主要是记录一下面试字节跳动的经历。 三四月份投了字节跳动的实习(图形图像岗位),然后hr打电话过来问了一下会不会opengl,c++,shador,当时只会一点c++,其他两个都不会,也就直接被拒了。 七月初内推了字节跳动的提前批,因为内推没有具体的岗位,hr又打电话问要不要考虑一下图形图像岗,我说实习投过这个岗位不合适,不会opengl和shador,然后hr就说秋招更看重基础。我当时
开源一个功能完整的SpringBoot项目框架
福利来了,给大家带来一个福利。 最近想了解一下有关Spring Boot的开源项目,看了很多开源的框架,大多是一些demo或者是一个未成形的项目,基本功能都不完整,尤其是用户权限和菜单方面几乎没有完整的。 想到我之前做的框架,里面通用模块有:用户模块,权限模块,菜单模块,功能模块也齐全了,每一个功能都是完整的。 打算把这个框架分享出来,供大家使用和学习。 为什么用框架? 框架可以学习整体
源码阅读(19):Java中主要的Map结构——HashMap容器(下1)
(接上文《源码阅读(18):Java中主要的Map结构——HashMap容器(中)》) 3.4.4、HashMap添加K-V键值对(红黑树方式) 上文我们介绍了在HashMap中table数组的某个索引位上,基于单向链表添加新的K-V键值对对象(HashMap.Node&lt;K, V&gt;类的实例),但是我们同时知道在某些的场景下,HashMap中table数据的某个索引位上,数据是按照红黑树
c++制作的植物大战僵尸,开源,一代二代结合游戏
    此游戏全部由本人自己制作完成。游戏大部分的素材来源于原版游戏素材,少部分搜集于网络,以及自己制作。 此游戏为同人游戏而且仅供学习交流使用,任何人未经授权,不得对本游戏进行更改、盗用等,否则后果自负。 目前有六种僵尸和六种植物,植物和僵尸的动画都是本人做的。qq:2117610943 开源代码下载 提取码:3vzm 点击下载--&gt; 11月28日 新增四种植物 统一植物画风,全部修
Java学习的正确打开方式
在博主认为,对于入门级学习java的最佳学习方法莫过于视频+博客+书籍+总结,前三者博主将淋漓尽致地挥毫于这篇博客文章中,至于总结在于个人,实际上越到后面你会发现学习的最好方式就是阅读参考官方文档其次就是国内的书籍,博客次之,这又是一个层次了,这里暂时不提后面再谈。博主将为各位入门java保驾护航,各位只管冲鸭!!!上天是公平的,只要不辜负时间,时间自然不会辜负你。 何谓学习?博主所理解的学习,它
程序员必须掌握的核心算法有哪些?
由于我之前一直强调数据结构以及算法学习的重要性,所以就有一些读者经常问我,数据结构与算法应该要学习到哪个程度呢?,说实话,这个问题我不知道要怎么回答你,主要取决于你想学习到哪些程度,不过针对这个问题,我稍微总结一下我学过的算法知识点,以及我觉得值得学习的算法。这些算法与数据结构的学习大多数是零散的,并没有一本把他们全部覆盖的书籍。下面是我觉得值得学习的一些算法以及数据结构,当然,我也会整理一些看过
Python——画一棵漂亮的樱花树(不同种樱花+玫瑰+圣诞树喔)
最近翻到一篇知乎,上面有不少用Python(大多是turtle库)绘制的树图,感觉很漂亮,我整理了一下,挑了一些我觉得不错的代码分享给大家(这些我都测试过,确实可以生成喔~) one 樱花树 动态生成樱花 效果图(这个是动态的): 实现代码 import turtle as T import random import time # 画樱花的躯干(60,t) def Tree(branch
linux系列之常用运维命令整理笔录
本博客记录工作中需要的linux运维命令,大学时候开始接触linux,会一些基本操作,可是都没有整理起来,加上是做开发,不做运维,有些命令忘记了,所以现在整理成博客,当然vi,文件操作等就不介绍了,慢慢积累一些其它拓展的命令,博客不定时更新 顺便拉下票,我在参加csdn博客之星竞选,欢迎投票支持,每个QQ或者微信每天都可以投5票,扫二维码即可,http://m234140.nofollow.ax.
Python 基础(一):入门必备知识
目录1 标识符2 关键字3 引号4 编码5 输入输出6 缩进7 多行8 注释9 数据类型10 运算符10.1 常用运算符10.2 运算符优先级 1 标识符 标识符是编程时使用的名字,用于给变量、函数、语句块等命名,Python 中标识符由字母、数字、下划线组成,不能以数字开头,区分大小写。 以下划线开头的标识符有特殊含义,单下划线开头的标识符,如:_xxx ,表示不能直接访问的类属性,需通过类提供
深度学习图像算法在内容安全领域的应用
互联网给人们生活带来便利的同时也隐含了大量不良信息,防范互联网平台有害内容传播引起了多方面的高度关注。本次演讲从技术层面分享网易易盾在内容安全领域的算法实践经验,包括深度学习图
程序员接私活怎样防止做完了不给钱?
首先跟大家说明一点,我们做 IT 类的外包开发,是非标品开发,所以很有可能在开发过程中会有这样那样的需求修改,而这种需求修改很容易造成扯皮,进而影响到费用支付,甚至出现做完了项目收不到钱的情况。 那么,怎么保证自己的薪酬安全呢? 我们在开工前,一定要做好一些证据方面的准备(也就是“讨薪”的理论依据),这其中最重要的就是需求文档和验收标准。一定要让需求方提供这两个文档资料作为开发的基础。之后开发
网页实现一个简单的音乐播放器(大佬别看。(⊙﹏⊙))
今天闲着无事,就想写点东西。然后听了下歌,就打算写个播放器。 于是乎用h5 audio的加上js简单的播放器完工了。 欢迎 改进 留言。 演示地点跳到演示地点 html代码如下`&lt;!DOCTYPE html&gt; &lt;html&gt; &lt;head&gt; &lt;title&gt;music&lt;/title&gt; &lt;meta charset="utf-8"&gt
Python十大装B语法
Python 是一种代表简单思想的语言,其语法相对简单,很容易上手。不过,如果就此小视 Python 语法的精妙和深邃,那就大错特错了。本文精心筛选了最能展现 Python 语法之精妙的十个知识点,并附上详细的实例代码。如能在实战中融会贯通、灵活使用,必将使代码更为精炼、高效,同时也会极大提升代码B格,使之看上去更老练,读起来更优雅。 1. for - else 什么?不是 if 和 else 才
数据库优化 - SQL优化
前面一篇文章从实例的角度进行数据库优化,通过配置一些参数让数据库性能达到最优。但是一些“不好”的SQL也会导致数据库查询变慢,影响业务流程。本文从SQL角度进行数据库优化,提升SQL运行效率。 判断问题SQL 判断SQL是否有问题时可以通过两个表象进行判断: 系统级别表象 CPU消耗严重 IO等待严重 页面响应时间过长
2019年11月中国大陆编程语言排行榜
2019年11月2日,我统计了某招聘网站,获得有效程序员招聘数据9万条。针对招聘信息,提取编程语言关键字,并统计如下: 编程语言比例 rank pl_ percentage 1 java 33.62% 2 c/c++ 16.42% 3 c_sharp 12.82% 4 javascript 12.31% 5 python 7.93% 6 go 7.25% 7
通俗易懂地给女朋友讲:线程池的内部原理
餐厅的约会 餐盘在灯光的照耀下格外晶莹洁白,女朋友拿起红酒杯轻轻地抿了一小口,对我说:“经常听你说线程池,到底线程池到底是个什么原理?”我楞了一下,心里想女朋友今天是怎么了,怎么突然问出这么专业的问题,但做为一个专业人士在女朋友面前也不能露怯啊,想了一下便说:“我先给你讲讲我前同事老王的故事吧!” 大龄程序员老王 老王是一个已经北漂十多年的程序员,岁数大了,加班加不动了,升迁也无望,于是拿着手里
经典算法(5)杨辉三角
杨辉三角 是经典算法,这篇博客对它的算法思想进行了讲解,并有完整的代码实现。
腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹?
昨天,有网友私信我,说去阿里面试,彻底的被打击到了。问了为什么网上大量使用ThreadLocal的源码都会加上private static?他被难住了,因为他从来都没有考虑过这个问题。无独有偶,今天笔者又发现有网友吐槽了一道腾讯的面试题,我们一起来看看。 腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹? 在互联网职场论坛,一名程序员发帖求助到。二面腾讯,其中一个算法题:64匹
面试官:你连RESTful都不知道我怎么敢要你?
面试官:了解RESTful吗? 我:听说过。 面试官:那什么是RESTful? 我:就是用起来很规范,挺好的 面试官:是RESTful挺好的,还是自我感觉挺好的 我:都挺好的。 面试官:… 把门关上。 我:… 要干嘛?先关上再说。 面试官:我说出去把门关上。 我:what ?,夺门而去 文章目录01 前言02 RESTful的来源03 RESTful6大原则1. C-S架构2. 无状态3.统一的接
为啥国人偏爱Mybatis,而老外喜欢Hibernate/JPA呢?
关于SQL和ORM的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行了一番讨论,感触还是有一些,于是就有了今天这篇文。 声明:本文不会下关于Mybatis和JPA两个持久层框架哪个更好这样的结论。只是摆事实,讲道理,所以,请各位看官勿喷。 一、事件起因 关于Mybatis和JPA孰优孰劣的问题,争论已经很多年了。一直也没有结论,毕竟每个人的喜好和习惯是大不相同的。我也看
项目中的if else太多了,该怎么重构?
介绍 最近跟着公司的大佬开发了一款IM系统,类似QQ和微信哈,就是聊天软件。我们有一部分业务逻辑是这样的 if (msgType = "文本") { // dosomething } else if(msgType = "图片") { // doshomething } else if(msgType = "视频") { // doshomething } else { // doshom...
致 Python 初学者
欢迎来到“Python进阶”专栏!来到这里的每一位同学,应该大致上学习了很多 Python 的基础知识,正在努力成长的过程中。在此期间,一定遇到了很多的困惑,对未来的学习方向感到迷茫。我非常理解你们所面临的处境。我从2007年开始接触 python 这门编程语言,从2009年开始单一使用 python 应对所有的开发工作,直至今天。回顾自己的学习过程,也曾经遇到过无数的困难,也曾经迷茫过、困惑过。开办这个专栏,正是为了帮助像我当年一样困惑的 Python 初学者走出困境、快速成长。希望我的经验能真正帮到你
Python 编程实用技巧
Python是一门很灵活的语言,也有很多实用的方法,有时候实现一个功能可以用多种方法实现,我这里总结了一些常用的方法,并会持续更新。
“狗屁不通文章生成器”登顶GitHub热榜,分分钟写出万字形式主义大作
一、垃圾文字生成器介绍 最近在浏览GitHub的时候,发现了这样一个骨骼清奇的雷人项目,而且热度还特别高。 项目中文名:狗屁不通文章生成器 项目英文名:BullshitGenerator 根据作者的介绍,他是偶尔需要一些中文文字用于GUI开发时测试文本渲染,因此开发了这个废话生成器。但由于生成的废话实在是太过富于哲理,所以最近已经被小伙伴们给玩坏了。 他的文风可能是这样的: 你发现,...
程序员:我终于知道post和get的区别
是一个老生常谈的话题,然而随着不断的学习,对于以前的认识有很多误区,所以还是需要不断地总结的,学而时习之,不亦说乎
"狗屁不通文章生成器"登顶GitHub热榜,分分钟写出万字形式主义大作
GitHub 被誉为全球最大的同性交友网站,……,陪伴我们已经走过 10+ 年时间,它托管了大量的软件代码,同时也承载了程序员无尽的欢乐。 万字申请,废话报告,魔幻形式主义大作怎么写?兄dei,狗屁不通文章生成器了解一下。这个富有灵魂的项目名吸引了众人的目光。项目仅仅诞生一周,便冲上了GitHub趋势榜榜首(Js中文网 -前端进阶资源教程)、是榜首哦
推荐几款比较实用的工具,网站
1.盘百度PanDownload 这个云盘工具是免费的,可以进行资源搜索,提速(偶尔会抽风????) 不要去某站买付费的???? PanDownload下载地址 2.BeJSON 这是一款拥有各种在线工具的网站,推荐它的主要原因是网站简洁,功能齐全,广告相比其他广告好太多了 bejson网站 3.二维码美化 这个网站的二维码美化很好看,网站界面也很...
《程序人生》系列-这个程序员只用了20行代码就拿了冠军
你知道的越多,你不知道的越多 点赞再看,养成习惯GitHub上已经开源https://github.com/JavaFamily,有一线大厂面试点脑图,欢迎Star和完善 前言 这一期不算《吊打面试官》系列的,所有没前言我直接开始。 絮叨 本来应该是没有这期的,看过我上期的小伙伴应该是知道的嘛,双十一比较忙嘛,要值班又要去帮忙拍摄年会的视频素材,还得搞个程序员一天的Vlog,还要写BU...
相关热词 c# plc s1200 c#里氏转换原则 c# 主界面 c# do loop c#存为组套 模板 c# 停掉协程 c# rgb 读取图片 c# 图片颜色调整 最快 c#多张图片上传 c#密封类与密封方法
立即提问