Both group users for sharing and assignment, but they serve different purposes.
A Public Group is a logical group of users (and other groups, roles, and roles-and-subordinates) used in sharing rules, list view filters, report sharing, and folder access. A public group doesn't own records — it's just a way to refer to a set of users for "who can see this".
A Queue is more like a shared mailbox for ownership. A queue can own records — typically Cases, Leads, or custom objects with the Allow Queues option enabled. Records sit in the queue until someone in it takes ownership. Queues are the foundation of routing models like assignment rules and Omni-Channel skills-based routing.
Choose by the question:
- "These five users should all be able to see records X" -> Public Group, used in a sharing rule.
- "These five users should all be able to work on records X — anyone can pick the next one up" -> Queue.
A queue can be referenced in sharing rules too (because membership confers visibility), but a public group cannot own records. Some objects (like Opportunity) don't support queues, so for those a public group plus sharing rule is your only option.
